我正在尝试在 MAC OSX 上编译一个程序,该程序最初是在 Linux 操作系统上编写的。这是一个包含多个 makefile 的大程序。我已经研究了几个星期,现在似乎无法弄清楚为什么会导致未定义的符号错误。有一个总体 Makefile 调用其他 makefile,以便编译顺序正确。
编译时,它会创建静态库以及多个应用程序。因为这家伙太大了,程序首先创建了这些静态库(.a 文件)。然后,当它专门为应用程序编译源代码时,它会链接静态库。(希望这不会太令人困惑)。
我可以很好地完成静态库的构建,但是一旦我到达构建应用程序的地步,我就会收到大量未定义的符号错误告诉我,例如
未定义符号:“_bagUpdateOptSurface”,引用自:libdbdbv6.a(dbv_bag.o) 中的 _dbv_bag
当我用 nm 检查 dbv_bag.o 时,我得到了很多未使用标题 U 定义的函数。
我可以用 nm 追溯这个函数并发现......
bagUpdateOptSurface.c -->bagUpdateOptSurface.o -->libbag.a --->dbv_bag.c --->dbv_bag.o --->libdbdv6.a --->应用程序
该函数是通过带有标题 T 的静态库 libbag.a 定义的,但目标文件 dbb_bag.o 将其与 U 定义为未定义。在那里的某个地方信息丢失了,我似乎无法理解为什么。
如果那里有更多经验将程序移植到mac的人可以帮助了解正在发生的事情,我将非常感激。欢迎任何想法对或错。
提前致谢