gpt4 book ai didi

linux - 如何解决共享库中 undefined reference ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:24 25 4
gpt4 key购买 nike

我已经查看了 stackoverflow 中的所有答案:不可能。

我编译了一个使用Nite1.3的共享库A。所以我的图书馆在:

 /usr/local/lib/A.so

我的项目 B 包含 A。

编译B,出现很多undefined reference to.. 怎样才能真正解决问题?

usr/local/lib/A.so: undefined reference to `XnVFlowRouter::XnVFlowRouter(char const*)'
.....

最佳答案

发生的事情是 A.so 不知道 nite 符号可以从 libnite.so 中获得,所以当它试图解析符号时,它不知道要在那个库中查找,并且在环境中什么也没有告诉它加载该库以寻找符号。

两种解决方案:

(1) 重新编译 A.so 并显式依赖 Nite 1.3,因此在编译时:

g++ -o A.so <files making up A.so> -L<DIRECTORY OF NITE> -Wl,-rpath <DIRECTORY OF NITE> -lnite

如果 libnite.so 位于标准位置之一,那么您应该能够省略 -L-Wl,-rpath 选项。这将使您的库明确依赖于 libnite。

(2)编译B时链接到libnite.so,所以链接行要加上:

-L<DIRECTORY OF NITE> -Wl,-rpath <DIRECTORY OF NITE> -lnite

作为附录,如果您有 .h 文件,但没有对应的 .a.so那么您需要先解决该问题,然后才能使用 A.so

例如,如果 libnite.so/usr/local/lib 中,那么您需要添加:

-L/usr/local/lib -Wl,-rpath /usr/local/lib -lnite

到编译行,以便它知道在编译时(-L 选项)和运行时(-Wl,-rpath 选项)。

关于linux - 如何解决共享库中 undefined reference ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20331886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com