1

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

这没有用。

谢谢。

4

3 回答 3

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而且您仍然需要-l像这样指定库的名称-lsomething,默认情况下,链接器会添加前缀和.so扩展名。

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

LD_LIBRARY_PATH=/path/to/libsomething ./executable

请记住仅指定路径,而不是单个库的完整地址。

于 2013-07-19T03:37:33.690 回答
0

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

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

所以你的选择是:

  1. LD_LIBRARY_PATH暂时排除旧的 lapack 库路径导出

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

-L照原样输入您输入的命令,如果您只打算编译 ( ) ,则没有使用该选项-c。您是否尝试从 lapack.cpp 构建可执行文件或创建另一个您想稍后链接的共享库?

于 2013-07-19T03:17:40.760 回答
0

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

于 2013-07-19T00:59:36.123 回答