我有一个用fortran 77编写的遗留代码。我正在尝试用gfortran构建它。但我似乎在将库包含在构建中的阶段失败了。几十个*.f源文件编译得很好,但是当它们被链接时,我得到一堆“未定义的引用”错误,所有这些错误都与我的库中定义的子例程和函数有关。我已经首先运行了库的makefile,所以我需要的变量都应该被导出。我正在使用"-L“选项,但无法让它按预期工作。
首先,下面是我的makefile中链接行的语法:
29 $(PROGRAM): $(SRCS) $(LIBS)
30 $(FC) $(FLFLAGS) -o $@ $+ -L$(DIRLIB) PROGRAM是程序名,SRCS是所有编译的源文件,LIBS被设置为两个不同的文件-一个归档文件(file.a)和一个file.o文件。FC是gfortran,到目前为止,我还没有任何用于FLFLAGS的特定链接标志,而DIRLIB是库的主目录。问题是,构建我的库产生的*.o文件并不只驻留在主目录DIRLIB中。DIRLIB包含几个目录,每个目录都有我的代码所需的自己的*.o文件。
我尝试在-L选项后面添加每个单独的目录(例如,DIRLIB/DIR1/*.o DIRLIB/DIR2/*.o DIRLIB/DIR3/*.o),但最终开始收到一些子例程被多重定义的错误。所有这些用户定义库和归档文件的事情都让我感到困惑,而且我在制作makefile方面还是个新手,所以我在这里只是碰碰运气,希望有人能帮助我阐明这一点。
发布于 2012-03-28 21:31:13
在链接命令中,库需要位于引用它们的.o文件之后。
我猜LIBS中的对象文件在库之后,但需要库中的一些过程。您可以显示实际运行的命令(所有变量都展开了)来确认这一点吗?
https://stackoverflow.com/questions/9894116
复制相似问题