感觉自己哪里都对:库编译通过,位置也对,dlopen()正确打开库,函数名(比如函数名是mainForMac)也正确,结果到了dlsym出错了,怎么回事?

  • 原因

  显然,库是c++编译的,实际上函数名在内部已经发行了变化。这个时候mainForMac可能变成了mainForMacZ3之类。当然了,试图使用新的函数名也是错误想法。

  • 解决办法

  应该这样声明mainForMac:

#ifdef __cplusplus
extern "C"{
#endif

int mainForMac(const int argc, const char**argv);

#ifdef __cplusplus
}
#endif

再重新编译库即可。