我正在使用gnu49编译编译qt5 c ++项目,同时在Mac OSX El Captitan上使用c ++ 11标志和通常的qt框架标志链接其他几个dylib(armadillo,boost libs等)。该项目编译得很好但是为了使其在其他几台机器上更加便携,我试图静态链接一些动态库。
我在这里描述的(静态链接的)库(例如JSON API
)之前添加了-static标志。
https://gcc.gnu.org/ml/gcc/2000-05/msg00517.html
但是,我收到以下错误。
ld:找不到-lcrt0.o collect2的库:错误:ld返回1退出状态
我确认错误仅在尝试静态链接而非动态链接时出现。
答案 0 :(得分:1)
GCC's -static
option是非位置的。它强制执行
所有库的静态链接。您的链接失败,因为您的系统没有静态版本的libcrt0.o
您可能会将GCC的static
选项与ld
's -static
option混淆(同义词:-Bstatic
,-dn
-non_shared
),
哪个是的位置。它仅影响命令行上的后续库。它是反过来的
链接器的-Bdynamic
选项(同义词:-dy
,-call_shared
)。
所以要仅链接库-lfoo
,-lbar
...静态地,通过GCC,您可以将-Bstatic
传递给
链接就在你提到它们之前,-Bdynamic
就在它们之后:
-Wl,-Bstatic -lfoo -lbar -Wl,-Bdynamic
不要省略最后的-Wl,-Bdynamic
,即使-lbar
是你的最后一个库,因为GCC悄悄附加标准库
你的联系(正如你所发现的那样)。