Eclipse中的-Wl选项



根据这一点,在gcc编译器选项中使用-Wl,-rpath=/path/to/so选项实际上会将其传递给链接器,但当我将此标志提供给Eclipse 中的编译器选项时

(properties->settings->GCC C Compiler->Miscellaneous->Other flagsproperties->settings->GCC C++ Compiler->Miscellaneous->Other flags(

它抱怨找不到so图书馆只有当我将-Wl,-rpath=/path/to/so传递给链接器选项时,它才找到so库。

这是怎么回事?

为什么这个选项不能作为编译器选项,而只能作为链接器选项

编译器将C代码转换为机器代码。编译器不关心其他库中的内容,只关心源文件。假设编译器生成一个机器代码,其中包含符号列表以及这些符号在源文件中的位置。许多符号在此可能未定义。所以像foo();调用被翻译成像CALL foo(这过于简单化了(。

链接器将多个对象文件合并到一个可执行文件中。因此,它会找到所有符号,如果main.o中有CALL foo,而库foo.o中有符号foo,它会将其更改为CALL 0x12345678-在最终可执行文件中foo函数的位置(即链接器可以根据自己的意愿重新排序符号((这种过于简单化(。

关键是编译器找不到任何库。Linker确实如此。因此,必须将该选项传递给链接器。

GCC被称为"GCC";编译器";作为一个整体,从某种意义上说,它附带了许多工具——预处理器、编译器和链接器(请参阅https://unix.stackexchange.com/questions/77779/relationship-between-cc1-and-gcc(。

最新更新