启动应用程序时出现问题:
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.dylib
或libmongoclient.so
。 libcrails-mongodb.dylib
与libmongoclient
动态链接,因此尽管存在静态libmongoclient.a
,但它找不到符号。您可以尝试使用libcrails-mongodb
静态地重新编译libmongoclient.a
,或查找libmongoclient
的动态库,通常是libmongoclient.dylib
或libmongoclient.so
。