C ++链接Lapack

时间:2013-07-19 00:31:42

标签: c++ g++

我正在使用一些代码,这些代码需要新版本的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

哪个不起作用。

感谢。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

所以你的选择是:

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

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

  3. 按照您输入的命令,如果您只打算编译-L,则不使用-c选项。您是否尝试从lapack.cpp构建可执行文件或创建另一个要在以后链接的共享库?

答案 2 :(得分:0)

使用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将库的路径添加到链接器,而且还需要使用{{指定lib的名称1}}如此-l,默认情况下,链接器会添加 lib 前缀和 .so 扩展名。

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

启动应用程序
-lsomething

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