繁体   English   中英

C ++链接Lapack

[英]C++ Linking Lapack

我正在使用一些代码,该代码需要一个新版本的lapack而不是服务器上当前安装的lapack。 系统管理员在以下位置安装了lapack:/sysadmin/lapack-3.4.2。

原始命令是:

g++ -o lapack.os -c -someOptions -IsomeFolders lapack.cpp

现在,我想链接到/sysadmin/lapack-3.4.2中安装的lapack版本。 我试过了:

g++ -o lapack.os -c -someOptions -IsomeFolders lapack.cpp -L/sysadmin/lapack-3.4.2

这没有用。

谢谢。

-c选项表示您要编译源代码。 链接程序时,需要传递-L/sysadmin/lapack-3.4.2

请使用收到的错误消息更新问题。

如果您在链接阶段遇到错误,我认为这是因为LD_LIBRARY_PATH优先于-L选项给定的路径。

因此,您的选择是:

  1. 暂时导出LD_LIBRARY_PATH不包括旧的lapack库路径

  2. 重命名新的lapack库,例如,重命名为newlapack.so,并使用-l选项和新的库名

照原样输入您输入的命令,如果仅要编译( -c ),则不使用-L选项。 您是要从lapack.cpp生成可执行文件还是要创建另一个共享库,以便以后与之链接?

用g ++编译共享库,通常的步骤是

g++ -c -fpic foo.cpp -o foo.o

这一步只是将foo.cpp编译为一个对象,通常您对所有拥有的源文件(取决于您的代码库和代码的个人组织)重复此过程,例如,您可能需要编译另一个源文件将更多内容添加到最终库g++ -c -fpic bar.cpp -o bar.o

一旦拥有所有已编译的对象,就可以使用以下命令创建最终的.so

g++ -shared foo.o bar.o -o libsomething.so

现在要实际使用该库(将其链接到您的可执行文件),您不仅需要使用-L将库的路径添加到链接器,而且还需要使用-l来指定lib的名称,例如-lsomething ,通过默认情况下,链接器添加lib前缀和.so扩展名。

如果要启动应用程序, 您的库不在系统的LD路径中,则可以使用以下命令启动应用程序:

LD_LIBRARY_PATH=/path/to/libsomething ./executable

记住只指定路径,而不要指定单个库的完整地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM