草庐IT

c++ - 如何使链接器不排除未调用的函数?

如果我定义了一个函数但不调用它,函数将不会出现在可执行文件中。但是有些情况下我们需要告诉链接器不要排除一个函数。例如,我已经定义了应该在调试时由totalview调试器调用的函数。如果我从某个地方(例如从main函数)调用该函数,问题将得到解决,它不会被排除,但是是否有一般规则告诉链接器不要排除函数? 最佳答案 您可以使用GCC的属性externally_visible来保证该函数存在。看起来像这样:#include__attribute__((externally_visible))intf(intx){returnx+2;}in

c++ - 如何使链接器不排除未调用的函数?

如果我定义了一个函数但不调用它,函数将不会出现在可执行文件中。但是有些情况下我们需要告诉链接器不要排除一个函数。例如,我已经定义了应该在调试时由totalview调试器调用的函数。如果我从某个地方(例如从main函数)调用该函数,问题将得到解决,它不会被排除,但是是否有一般规则告诉链接器不要排除函数? 最佳答案 您可以使用GCC的属性externally_visible来保证该函数存在。看起来像这样:#include__attribute__((externally_visible))intf(intx){returnx+2;}in

linux - 共享库中的重定位条目

我正在调查共享库的重定位,遇到了一些奇怪的事情。考虑这段代码:intmyglob;intml_util_func(intp){returnp+2;}intml_func2(inta,intb){intc=ml_util_func(a);returnc+b+myglob;}我用gcc-shared将它编译成一个non-PIC共享库。我在x86上运行的32位Ubuntu上执行此操作。生成的.so有一个重定位条目,用于调用ml_func2中的ml_util_func。这是objdump-dR-Mintel在ml_func2上的输出:0000050d:50d:55pushebp50e:89e5

linux - 共享库中的重定位条目

我正在调查共享库的重定位,遇到了一些奇怪的事情。考虑这段代码:intmyglob;intml_util_func(intp){returnp+2;}intml_func2(inta,intb){intc=ml_util_func(a);returnc+b+myglob;}我用gcc-shared将它编译成一个non-PIC共享库。我在x86上运行的32位Ubuntu上执行此操作。生成的.so有一个重定位条目,用于调用ml_func2中的ml_util_func。这是objdump-dR-Mintel在ml_func2上的输出:0000050d:50d:55pushebp50e:89e5

c++ - 如何在 Eclipse CDT 中将静态库链接到静态库

我有3个项目A、B和C。A是通用的,被B使用,最终被C使用。B比较特殊,目前只有C使用。现在,因为我希望A和B尽可能地被重用,所以我认为它们都是静态库。所以我将A和B链接到静态库,将C链接到可执行文件,但是当我想链接C它给了我一些关于A函数的undefinedreference错误。所以我将库A添加到链接器选项来解决这个问题,但它没有帮助。所以我想:当我想部署B时,我也必须部署A才能链接。有没有办法将静态库A链接到静态库B,这样我就不必部署2个文件?如果是这样,我该如何使用EclipseCDT实现这一点,因为我找不到为归档程序定义其他目标的地方。添加我在linux下工作,但这些东西也应

c++ - 如何在 Eclipse CDT 中将静态库链接到静态库

我有3个项目A、B和C。A是通用的,被B使用,最终被C使用。B比较特殊,目前只有C使用。现在,因为我希望A和B尽可能地被重用,所以我认为它们都是静态库。所以我将A和B链接到静态库,将C链接到可执行文件,但是当我想链接C它给了我一些关于A函数的undefinedreference错误。所以我将库A添加到链接器选项来解决这个问题,但它没有帮助。所以我想:当我想部署B时,我也必须部署A才能链接。有没有办法将静态库A链接到静态库B,这样我就不必部署2个文件?如果是这样,我该如何使用EclipseCDT实现这一点,因为我找不到为归档程序定义其他目标的地方。添加我在linux下工作,但这些东西也应

linux - 预链接仅对相对重定位有影响

我正在使用cross-prelink为嵌入式ARM设备预链接使用Qt的大型C++可执行文件。请注意,我不是使用Yocto,而是使用自定义分发-所以我目前正在手动运行预链接。查看prelink的输出,似乎有效:$prelink--verbose--ld-library-path=/opt//lib:/usr/local/Qt-5.3.1/lib--root=$PRODUCT_TARGET_ROOT//rfs//path/to/binaryLayingout56librariesinvirtualaddressspace41000000-50000000Assignedvirtualadd

linux - 预链接仅对相对重定位有影响

我正在使用cross-prelink为嵌入式ARM设备预链接使用Qt的大型C++可执行文件。请注意,我不是使用Yocto,而是使用自定义分发-所以我目前正在手动运行预链接。查看prelink的输出,似乎有效:$prelink--verbose--ld-library-path=/opt//lib:/usr/local/Qt-5.3.1/lib--root=$PRODUCT_TARGET_ROOT//rfs//path/to/binaryLayingout56librariesinvirtualaddressspace41000000-50000000Assignedvirtualadd

linux - ELF格式的重定位信息在哪里?

在Loaders部分引用“LinkersandLoaders”"load-timerelocationisfarsimplerthanlink-timerelocation,becausetheentireprogramisrelocatedasaunit.[...]Afterreadingtheprogramintomemory,theloaderconsultstherelocationitemsintheobjectfileandfixesupthememorylocationstowhichtheitemspoint"也许我误解了这一点,这仅在某些体系结构中存在,但我的问题是:

linux - ELF格式的重定位信息在哪里?

在Loaders部分引用“LinkersandLoaders”"load-timerelocationisfarsimplerthanlink-timerelocation,becausetheentireprogramisrelocatedasaunit.[...]Afterreadingtheprogramintomemory,theloaderconsultstherelocationitemsintheobjectfileandfixesupthememorylocationstowhichtheitemspoint"也许我误解了这一点,这仅在某些体系结构中存在,但我的问题是: