[英]Linking in a static library failes, but linking a shared library succeeds
我可以针对共享库构建应用程序,但将其与同一库的静态版本链接时出现未解决的符号错误:
我可以这样构建我的应用程序:
g++ -lutils application.cpp -o application.exe
上面的命令链接了utils库的共享版本。
我正在尝试像这样的静态版本的库链接:
g++ -l:utils.a application.cpp -o application.exe
两次我都在使用
export LD_LIBRARY_PATH=path/to/utils:$LD_LIBRARY_PATH
通知g ++ utils.a的放置位置。
ld报告的未解析符号出现在nm的输出中:
nm --defined-only path/to/utils.a
并标有“ T”(表示它来自代码部分)。
我正在尝试找出问题的原因。
使用LD_LIBRARY_PATH指定在哪里搜索utils.a是否正确?
验证静态库定义(解析)符号的确切命令是什么? 是命令
nm --defined-only path/to/utils.a
足够还是我应该使用其他任何选项,例如
nm --defined-only --demangle path/to/utils.a
例如?
对于编译器来说,仅选项-static应该足够了。 如果只有一个库必须是静态的,则-static-和lib name是短名称而不是文件名。
使用LD_LIBRARY_PATH指定在哪里搜索utils.a是否正确?
验证静态库定义(解析)符号的确切命令是什么? 是命令nm --defined-only path / to / utils.a
请参阅GNU文档GCC链接选项摘录:
-l library:链接时搜索名为library的库。 链接器在标准目录列表中搜索该库。 搜索的目录包括几个标准系统目录以及您使用-L指定的目录。
另外,使用-l链接选项,您需要提供库名(不带“ lib”和扩展名)或完整文件名。 -lutils或-llibutils.a如果需要,也可以仅在此处提供直接的完整路径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.