fedora – pkg-config非常糟糕

我最近一直在苦苦挣扎,只是试图编译几个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

显然它安装在/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

现在,使用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

所以我确实添加了目录:

PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

但是没有运气! 🙁 pkg-config仍然给我与上面相同的消息.(也许你会……)

当我需要编译一些C程序时,这是我经常遇到的一个更普遍的问题.我想要一个通用的解决方案:

>我在哪里以及如何安装我的C库? (或许yum安装它们的地方相同?)
>如何更正/配置和使用pkg-config

更新:我尝试了下面的一个答案的建议并运行已编译的程序给我这个:./ gsl_app:加载共享库时出错:libgsl.so.0:无法打开共享对象

最佳答案

Apparently it installed in /usr/local/lib which is a non-standard place?

它是一个标准的位置,但有时系统被配置为假设您不打算构建 – 安装任何东西,因此它被排除在链接器缓存路径之外.

Where and how do I install my C libs? (Perhaps the same place yum installs them?)

这通常是一个坏主意,尤其是.如果有潜在的发行版软件包 – 现在或者下线 – 那个冲突.坚持使用/usr/local.

通过运行ldconfig -v 2>& 1 |来检查/usr/local/lib是否在ld.so.cache中. grep /usr/local.如果没有输出任何内容,请使用一行创建一个文件/etc/ld.so.conf.d/local.conf:

/usr/local/lib

再次运行该ldconfig行,这次你应该看到它.每次从源代码构建和安装库时,都需要运行ldconfig.

I can’t manage to compile a simple program that uses this library

因为您必须将pkg-config参数传递给编译器.首先,您需要找到实际的gsl.pc.

find /usr/local -name gsl.pc

我认为它更可能出现在/usr/local/lib / pkgconfig中,而不是像你说的那样/usr/local/pkgconfig.试试pkg-config –list-all | grep gsl,看看是否找到了.如果不导出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`

您不需要自己包含-I和-L;这就是pkg-config的用途,尽管你之前可能缺少的是-lgsl.

转载注明原文:fedora – pkg-config非常糟糕 - 代码日志