首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在库中使用gfortran

在库中使用gfortran
EN

Stack Overflow用户
提问于 2012-03-28 00:54:37
回答 2查看 1.8K关注 0票数 1

我有一个用fortran 77编写的遗留代码。我正在尝试用gfortran构建它。但我似乎在将库包含在构建中的阶段失败了。几十个*.f源文件编译得很好,但是当它们被链接时,我得到一堆“未定义的引用”错误,所有这些错误都与我的库中定义的子例程和函数有关。我已经首先运行了库的makefile,所以我需要的变量都应该被导出。我正在使用"-L“选项,但无法让它按预期工作。

首先,下面是我的makefile中链接行的语法:

代码语言:javascript
复制
 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方面还是个新手,所以我在这里只是碰碰运气,希望有人能帮助我阐明这一点。

EN

回答 2

Stack Overflow用户

发布于 2012-03-28 21:31:13

在链接命令中,库需要位于引用它们的.o文件之后。

我猜LIBS中的对象文件在库之后,但需要库中的一些过程。您可以显示实际运行的命令(所有变量都展开了)来确认这一点吗?

票数 0
EN

Stack Overflow用户

发布于 2012-05-18 21:07:37

我尝试使用该库再次构建此代码。这一次起作用了。我非常确定我在makefile中做的事情和我之前做的一样,所以它一定与我的库有关。也许有人在一路上修改了它,无意中把它弄坏了。但我拿到了一本干净的图书馆。我的步骤是:

1)对库源文件运行makefile;它会创建一个库。归档文件

2)运行我的代码生成文件:

  • 它有一行指定此存档文件的位置并将其分配给"DIRLIB“

../library

  • then :=生成文件的链接命令变为

$(FC) $(FLFLAGS) -o $@ $+ -L$(DIRLIB) -lskit

FC是我的编译器,FLFLAGS是我的链接标志,-L是指定要包含的库的位置的选项,-lskit是允许使用F77库的关键选项……如果没有-lskit选项,我会得到许多未定义的引用错误。这可能是我最后一次在最后没有包括这个-lskit选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9894116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档