我很不习惯使用C,而且对编译更大的项目完全不熟悉,而且我在尝试构建GNU Archimedes时遇到了问题。
我尝试了./configure
和make
方法,以及在gcc -lm archimedes.c -o archimedes
目录中执行src/
,正如文档所示。两者都给出了类似的错误消息:
Undefined symbols for architecture x86_64:
"_MM2", referenced from:
_ParabMEP2D in ccwORAXj.o
_Hole_MEP2D in ccwORAXj.o
"_creation", referenced from:
_EMC in ccwORAXj.o
"_rnd", referenced from:
_MCdevice_config in ccwORAXj.o
_scat in ccwORAXj.o
_EMC in ccwORAXj.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
MM2
,rnd
和creation
是src/
中许多.h文件中包含的函数。类似探测问题的每个解决方案都存在将多个已编译的.c文件链接在一起的问题,但在这种情况下,只有一个.c文件。
如果相关,则每次尝试时,错误中.o文件的名称都会更改。
我尝试在macOS下构建它(包括clang和gcc,后者通过Homebrew安装)和Fedora Linux,结果类似。
我做错了什么?我希望这是一个正确的问题,但我不知道还有什么地方可以转。我很感激你的建议。
提前致谢,祝你有个美好的一天!
答案 0 :(得分:1)
在/archimedes-2.0.1/src/文件夹中,遍历所有头文件(.h),并将每个“内联”更改为“静态内联”。
此修复程序由Alexander Vogt找到。他的原始文章链接到下面:
https://lists.gnu.org/archive/html/archimedes-discuss/2017-11/msg00000.html
问题与旧版本和新版本的c编译器之间的兼容性有关。