对"gemmkernel_"的未定义引用 - 从 Fortran 调用C++例程
undefined reference to `gemmkernel_'--C++ routine called from Fortran
我一直在编写一个调用c++方法的Fortran例程。当我尝试创建它时,我得到以下错误:
make -f makefile_gcc
错误:<>之前gfortran -O3 -o tgemm tgemm。o定时器。o dgemmf。0 -lblas -dgemmkerneldgemmf。在函数' dgemmf_'中:ggemmf .f:(.text+0x135):对' gemkernel_ '的未定义引用Collect2: ld返回1退出状态make: *** [tgemm] Error之前这是我的makefile:
`FC=gfortran
CC=gcc
FFLAGS = -O3
CFLAGS = -O5
BLASF=dgemmf.o
BLASFSRC=dgemmf.f
TIMER=mytimer.o
TGEMM=tgemm
ALL= $(TGEMM)
LIBS = -lblas -dgemmkernel.o
all: $(ALL)
$(TGEMM): dgemmkernel.o tgemm.o $(TIMER) $(BLASF)
$(FC) $(FFLAGS) -o $(TGEMM) tgemm.o $(TIMER) $(BLASF) $(LIBS)
dgemmkernel.o: dgemmkernel.cpp
$(CC) $(CFLAGS) -c dgemmkernel.cpp
tgemm.o: tgemm.f $(INCLUDE)
$(FC) $(FFLAGS) -c tgemm.f
clean:
rm -rf *.o $(ALL)
下面是我的Fortran代码:
<>之前子程序dgemmf (transa, transb, m, n, k, alpha, a, lda, b, ldb,$ beta, c,最不发达国家)* . .标量参数..字符*1转换,转换整数m, n, k, lda, ldb, LDC双精度* . .数组参数…双精度a (lda, *), b (ldb, *), c (ldc, *)* . .外部功能…逻辑 LSAME外部 LSAME* . .局部标量…逻辑上没有,没有整数i, j, l* . .参数. .双精度1,0参数(1 = 1.0d +0, 0 = 0.0d +0)* . .* . .可执行语句…**设置NOTA和nob为真,如果A和B分别没有转置*Nota = lsame (trans, ' n ')nob = lsame (transb, ' n ')*我们只想要C = A°B*如果((ALPHA.NE.ONE)支。(BETA.NE.ZERO)支。$ (. not . nota). or .(. not . notb))停止**启动操作。调用gemmkernel(M, N, K, A, LDA, B, LDB, C, LDC)返回* DGEMM结束。*结束之前这里是我想调用的c++位
void gemmkernel_(int * M, int * N, int * K,
double * a, int * LDA,
double * b, int * LDB,
double * c, int * LDC)
所有的.o文件都被创建了,但是可执行文件从未完成。我怀疑这个错误与我的makefile有关,因为到目前为止我找到的每个源都向我表明我的Fortran/c++代码是正确的。
您的make在链接时失败。dgemmkernel。0应该在目标文件列表中。我假设你想要这一行:
$(FC) $(FFLAGS) -o $(TGEMM) tgemm.o $(TIMER) $(BLASF) $(LIBS)
:
$(FC) $(FFLAGS) -o $(TGEMM) tgemm.o dgemmkernel.o $(TIMER) $(BLASF) $(LIBS)
和
LIBS = -lblas -dgemmkernel.o
:
LIBS = -lblas
相关文章:
- Fortran 和 C++ 的混合编程:Fortran 不能调用C++子程序
- 是否可以从C 调用FORTRAN接口
- 如何使用 std::vector 作为参数调用 Fortran 77 C++函数?
- 试图在C 中调用Fortran子例程
- 如何在 C++14 中编写用于调用 Fortran 函数的通用包装器(按引用调用 --按值调用>)
- 从C 调用Fortran子例程会产生非法参数值
- MATLAB由于调用库(C++.h文件和FORTRAN.dll)而崩溃
- 从C++调用的Fortran子程序的值错误
- 为什么值放置在 fortran 函数的数组中,而在调用 c++ 函数中不存在
- 当C代码调用Fortran子程序时,子程序顶部会出现分段错误
- 从QTCreator中调用QT的Fortran代码
- 从 C++ 调用 Fortran 子例程
- C++从dll调用FORTRAN子程序
- 使用 OpenMPI 从 Fortran 调用C++
- 从Fortran调用C++(链接问题?)
- 在Visual Studio 2010中使用Fortran调用c++函数
- 对"gemmkernel_"的未定义引用 - 从 Fortran 调用C++例程
- Fortran调用c++指针函数
- 从Fortran调用的c++子程序:如何处理动态内存分配
- 从 Fortran 调用 C 函数,其中 C 函数名称最初是从 C 传入的