【发布时间】:2017-05-03 19:59:59
【问题描述】:
我正在尝试编译一个使用 GSL 的程序,事实上我已经能够在我的本地机器上使用它成功编译它
g++ -o program program.c prog0.o -L/usr/local/lib -lgsl -lgslcblas -lm
我的问题是我需要在共享系统的工作机器上编译这个程序,但我知道这个程序不会用最新版本的 GSL 编译,所以我需要安装和使用旧版本。 我在自己的系统上使用默认安装完成了此操作,因此相关文件位于本地计算机上的 /usr/local/lib 中,并且使用上述命令对我进行编译。
但是由于工作机器在共享系统中,我不能乱用默认目录,所以我在 /home/myname/gsl/ 下的目录中的工作机器上安装了正确的 GSL 版本。 因此,在工作机器上,文件夹 /home/myname/gsl/lib 包含与我机器上的文件夹 /usr/local/lib 相同的相关文件。
现在我做了各种尝试,试图告诉 g++ 使用这个自定义安装文件夹,我认为它会归结为
g++ -o program program.c prog0.o -L/home/myname/gsl/lib -lgsl -lgslcblas -lm
但没有成功。不管我做什么g++总是使用安装在共享系统上的GSL版本,即使只是使用
g++ -o program program.c prog0.o
不久前我才开始编程C/C++,只知道如何编译程序的最基本知识,所以这个链接的东西总是让我感到困惑.. 但据我所知, -L/dir/ 应该告诉 g++ 使用 /dir/ 中的库,而 -lgsl -lgslcblas 是它应该在该库中查找的文件...? 但似乎 g++ 并不关心我在这里告诉它的库,它似乎总是使用共享工作系统的 PATH 中的任何内容,这似乎包括我无法使用的这个最新版本的 GSL。但我也无法更改 PATH,因为我只能访问工作系统上我自己的子目录。 那么如何告诉 g++ 忽略 GSL 的默认版本并使用我在 /home/myname/gsl/ 手动安装的版本?
【问题讨论】:
-
g++是 C++ 编译器前端,但您的文件使用.c通常是 C。正确使用语言,它们是不同的语言!没有语言“C/C++”! -
你试过 gcc 吗?
-
@Olaf err.. 我得到提供的 C 程序并且不太喜欢 C 的工件,所以我使用 C++ 来扩展它们并且正在摆脱 C.. 目前仍然两者兼而有之,但只要它有效,我目前有更高的优先级。比如让这个编译工作。
-
@Nguai al 大部分代码都在 C++ 中,所以我怀疑 gcc 是否可以工作
-
试试这个:-rpath=/home/myname/gsl/lib
标签: compilation linker