如何使用Clang和MacOSX提供给定的符号

时间:2014-10-28 11:48:19

标签: c++ macos clang

启动我的应用程序时遇到问题:

dyld: Symbol not found: __ZN5mongo2LTE
  Referenced from: /usr/local/lib/libcrails-mongodb.dylib
  Expected in: flat namespace
 in /usr/local/lib/libcrails-mongodb.dylib

如果我使用nm搜索符号__ZN5mongo2LTE,我会找到以下匹配项:

$: nm -A /usr/local/lib/libcrails-mongodb.dylib | grep __ZN5mongo2LTE
/usr/local/lib/libcrails-mongodb.dylib:                  U __ZN5mongo2LTE

如果我的理解是正确的,这意味着该符号被引用,但未被解决。

现在,如果我查看另一个也链接到我的项目的库:

$: nm -A /usr/lib/libmongoclient.a | grep __ZN5mongo2LTE
/usr/lib/libmongoclient.a:jsobj.o: 00000000000eca00 S __ZN5mongo2LTE

同样,根据我的理解,这意味着符号存在于给定地址的同一个库中。

我错了吗?如果没有,那么为什么没有找到符号"" ?

1 个答案:

答案 0 :(得分:1)

似乎需要访问libmongoclient.dyliblibmongoclient.so

libcrails-mongodb.dyliblibmongoclient动态链接动态,因此无法找到符号,但有静态libmongoclient.a
您可以尝试使用libcrails-mongodb静态重新编译libmongoclient.a,或找到libmongoclient的动态库,通常为libmongoclient.dyliblibmongoclient.so