启动应用程序时出现问题:

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


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

我在哪里错了?如果没有,那么为什么找不到符号?

最佳答案

看来需要可访问的libmongoclient.dyliblibmongoclient.solibcrails-mongodb.dyliblibmongoclient动态链接,因此尽管存在静态libmongoclient.a,但它找不到符号。您可以尝试使用libcrails-mongodb静态地重新编译libmongoclient.a,或查找libmongoclient的动态库,通常是libmongoclient.dyliblibmongoclient.so

08-15 22:02