我最近经历了一段痛苦的时光,只是试图编译几个 C 程序,因为我找不到库所在的位置,而且 pkg-config 似乎有问题。
我像这样安装了 GNU GSL:
wget ftp://ftp.gnu.org/gnu/gsl/gsl-1.15.tar.gz
tar xvzf gsl-*gz
cd gsl-1.15
./configure
make
sudo make install
Run Code Online (Sandbox Code Playgroud)
显然它安装在/usr/local/lib哪个非标准的地方?(1)什么是标准场所?(2)我如何让它安装在那里?
而且我无法编译一个使用这个库的简单程序:
$ gcc gsl_erf.c -o gsl -I/usr/local/lib -L/usr/local/lib
/tmp/cc3WD9Zq.o: In function `main':
gsl_erf.c:(.text+0x24): undefined reference to `gsl_cdf_gaussian_P'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
现在,使用 pkg-config :
pkg-config --libs --cflags gslPackage gsl was not found in the pkg-config search path.
Perhaps you should add the directory containing `gsl.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gsl' found
Run Code Online (Sandbox Code Playgroud)
所以我确实添加了目录:
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
Run Code Online (Sandbox Code Playgroud)
但还没有运气!:( pkg-config 仍然给我和上面一样的消息。( Perhaps you sh ...)
这是我在编译一些 C 程序时经常遇到的一个更普遍的问题。我希望有一个通用的解决方案:
更新:我尝试了下面的答案之一,运行编译的程序给了我这个:./gsl_app: error while loading shared libraries: libgsl.so.0: cannot open shared object
显然它安装在 /usr/local/lib 这是一个非标准的地方?
这是一个标准位置,但有时系统配置假设您不打算构建安装任何东西,因此它被排除在链接器缓存路径之外。
我在哪里以及如何安装我的 C 库?(也许是 yum 安装它们的同一个地方?)
这通常是一个坏主意,尤其是。如果有潜在的发行版软件包——现在,或者即将上线——那么就会发生冲突。坚持使用 /usr/local。
/usr/local/lib通过运行检查是否在 ld.so.cache 中ldconfig -v 2>&1 | grep /usr/local。如果您没有得到任何输出,请创建一个/etc/ld.so.conf.d/local.conf包含一行的文件:
/usr/local/lib
Run Code Online (Sandbox Code Playgroud)
ldconfig再次运行该行,这次您应该会看到它。 每次从源构建和安装库时,您都需要运行ldconfig。
我无法编译一个使用这个库的简单程序
因为你必须将pkg-config参数传递给编译器。首先,您需要找到实际的gsl.pc.
find /usr/local -name gsl.pc
Run Code Online (Sandbox Code Playgroud)
我认为它更有可能在/usr/local/lib/pkgconfig,而不是/usr/local/pkgconfig像你说的那样。试试看pkg-config --list-all | grep gsl有没有找到。如果不是export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH(或 gsl.pc 所在的任何目录),请重试。当你做对了,你可能想把它添加到某个地方,例如,/etc/profile.d.
现在,要实际编译:
gcc gsl_erf.c -o gsl `pkg-config --libs --cflags gsl`
Run Code Online (Sandbox Code Playgroud)
你不需要包括-I和-L你自己;这就是为什么pkg-config,尽管您之前可能缺少的只是-lgsl.
| 归档时间: |
|
| 查看次数: |
9044 次 |
| 最近记录: |