从.o制作动态库时出错

时间:2012-12-30 11:17:56

标签: macos linker dylib

我正在尝试从.o文件集中创建动态库,但是当我这样做时

  

gcc -dynamiclib -current_version 1.0 mymod.o -o mylib.dylib

  

ld * .o -o mylib.dylib

我收到很多错误,如:

  

“_ objc_msgSend”,引自:          - NSObject + SBJSON.o中的[NSObject(NSObject_SBJSON)JSONFragment]

     

“operator new(unsigned long)”,引自:         MStatistic.o中的MStatistic :: instance()         StatisticObserver.o中的StatisticProfileLoggingObserver :: instance()

     

ld:找不到架构x86_64的符号

你能帮助我,如何解决它并得到我的.dylib?

2 个答案:

答案 0 :(得分:3)

您可以将-undefined dynamic_lookup作为选项传递给ld,或者:
-Wl,-undefined -Wl,dynamic_lookupgccclang(将其传递给链接器)。

答案 1 :(得分:0)

从这一行:

ld: symbol(s) not found for architecture x86_64

听起来你正在构建一些库,这些库只创建了仅为32位体系结构构建的文件。

您需要修改所有您正在构建的库/框架的makefile,以构建32位和64位;在实际意义上,所有出货的MacOS机器都具有64位功能,因此为64位构建 可能是安全的。

在编译/链接行中,添加如下内容:“-arch x86_64”并且应该为64位端编译内容。同时做32& 64位,你基本上需要复制编译和放大器链接行与他们自己的“-arch i386”和“-arch x86_64”行。