[英]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
选项给定的路径。
因此,您的选择是:
暂时导出LD_LIBRARY_PATH
不包括旧的lapack库路径
重命名新的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.