-1

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

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

或者

ld *.o -o mylib.dylib

我收到很多错误,例如:

“_objc_msgSend”,引用自:-[NSObject(NSObject_SBJSON) JSONFragment] in NSObject+SBJSON.o

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

ld:未找到架构 x86_64 的符号

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

4

2 回答 2

3

您可以将-undefined dynamic_lookup选项传递给ld, or:
-Wl,-undefined -Wl,dynamic_lookupto gccor clang(将其传递给链接器)。

于 2012-12-30T11:24:09.350 回答
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”行复制编译和链接行。

于 2012-12-30T11:23:07.007 回答