Bri*_*erg 6 shared-libraries dynamic-linking static-linking
我的问题与这个问题不一样.
我正在开发一个带有独立二进制文件的项目,该项目没有动态/外部链接,并且在*nix环境中运行.
我正在尝试使用更新的工具集进行构建,但现在无法使用旧工具集中提供的某些静态库 - 例如,此工具集中未提供提供_start的crt库.
我一直在挖掘供应商工具集提供的文件,并从crt库中找到了我需要的符号的共享对象(例如,_start,_fini等),但我不确定是否有一种直接的方式来静态链接将对象共享为二进制文件,并进一步使该二进制文件可执行.
简短版本:非共享对象二进制文件是否可以与共享对象静态链接,而结果不会成为另一个共享对象?
是的,我知道这是一个 6 年前的问题。有人告诉我可以静态链接到共享对象库,但我也发现它不是。
要实际证明使用ld(gcc的链接器)无法静态链接共享对象库,请使用以下gcc命令:
gcc -o executablename objectname.o -Wl,-Bstatic -l:libnamespec.so
Run Code Online (Sandbox Code Playgroud)
(当然,您必须objectname.o从编译sourcename.c,并且您可能还应该构建自己的共享对象库。如果这样做,请使用-Wl,--library-path,.ld 以便 ld 可以在本地目录中找到您的库。)
您收到的实际错误是:
/usr/bin/ld: attempted static link of dynamic object `libnamespec.so'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
显然,试图将对象从共享对象库中拉出是ld会犹豫的。
有提出了一些建议在这里,但我对这个问题的兴趣仅仅是学术。
希望有帮助。
| 归档时间: |
|
| 查看次数: |
9116 次 |
| 最近记录: |