我可以针对共享库构建应用程序,但是在将其与同一库的静态版本链接时遇到无法解决的符号错误:
我可以这样构建应用程序:
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
例如?
答案 0 :(得分:0)
对于编译器来说,仅-static选项就足够了。如果只有一个库必须是静态的,则-static-和lib name是短名称而不是文件名。
答案 1 :(得分:0)
使用LD_LIBRARY_PATH指定在哪里搜索utils.a是否正确?
验证静态库定义(解析)符号的确切命令是什么?是命令nm---defined-only path / to / utils.a
引用GNU documentation GCC link options 摘录:
-l库:链接时搜索名为library的库。链接器在标准目录列表中搜索该库。搜索的目录包括几个标准系统目录以及您使用-L指定的目录。
此外,使用-l链接选项,您需要提供库名(不带“ lib”和扩展名)或完整文件名。 -lutils或-llibutils.a 如果需要,您还可以仅在此处提供直接的完整路径。