我正在使用一些代码,这些代码需要新版本的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
哪个不起作用。
感谢。
答案 0 :(得分:0)
-c
选项意味着您要编译源代码。链接程序时需要传递-L/sysadmin/lapack-3.4.2
。
答案 1 :(得分:0)
请使用您收到的错误消息更新问题。
如果您在链接阶段遇到错误,我认为这是因为LD_LIBRARY_PATH
优先于-L
选项给出的路径。
所以你的选择是:
导出LD_LIBRARY_PATH
暂时不包括旧的lapack库路径
将新的lapack库重命名为newlapack.so,并使用-l
选项和新库名称
按照您输入的命令,如果您只打算编译-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
记得只指定路径,而不是单个库的完整地址。