我已经使用动态库成功开发了代码。现在我需要转移到静态库。所以我用作者指定的make构建了库,但是当我尝试构建我的程序时,我遇到了这些消息:
/usr/bin/ld: /usr/local/lib/libfft3dmpi.a(remap3d_wrap.o): in function `remap3d_create':
/home/mirco/Scrivania/fftmpi-1Oct18/src/remap3d_wrap.cpp:36: undefined reference to `operator new(unsigned long)'
/usr/bin/ld: /usr/local/lib/libfft3dmpi.a(remap3d_wrap.o): in function `remap3d_create_fortran(int, void**)':
/home/mirco/Scrivania/fftmpi-1Oct18/src/remap3d_wrap.cpp:45: undefined reference to `operator new(unsigned long)'
等等..我试图在makefile中指定库的完整路径或使用-l(name of the library)
但我仍然面对相同的消息
我的makefile是
$(CC) -O3 -o exe channel_mpi.o initialization.o convol_trasp.o fft_support.o data_man.o dnsdata.o dnsdirect.o /home/mirco/Scrivania/fftmpi-1Oct18/src/libfft3dmpi.a -lm
编译器是h5pcc,它是用一些标志包装的mpicc来使用HDF5库。
我做错了吗?
谢谢你的帮助
operator new
是一个C ++的东西。看来你正在用C ++代码而不是C构建.makefile变量$(CC)
是C编译器,$(CXX)
是C ++编译器。
所以解决方案是切换你用于链接的编译器。
链接C ++前端程序(通常是Linux系统上的g++
)时会自动添加C ++标准库。这个库包含许多C ++标准函数的默认实现,比如C ++ new
运算符所需的函数。
也可以使用C前端(gcc
),但是你必须明确地链接到C ++库。对于gcc
,这意味着你必须添加-lstdc++
。