链接静态库与动态库的问题

米尔科

我已经使用动态库成功开发了代码。现在我需要转移到静态库。所以我用作者指定的 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++ 前端程序时(通常g++在 Linux 系统上)会自动添加 C++ 标准库。正是这个库包含了许多 C++ 标准函数的默认实现,例如 C++new运算符所需的函数

也可以使用 C 前端 ( gcc),但是您必须显式链接 C++ 库。因为gcc那意味着你必须添加-lstdc++.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章