如何链接非标准位置的库进行编译

问题描述 投票:0回答:1

我是Linux的新手,正在尝试编译和安装一些库。

不幸的是,事情非常困难,因为我无法获得对我的计算机的sudo访问权限,并且不得不将库安装在非标准位置。

我无法让编译器找到我安装的库。

我正在尝试安装的一个库(https://github.com/tpm2-software/tpm2-tss/blob/master/INSTALL.md)与其他库具有依赖性,并且在尝试编译时出现以下错误代码,并且无法修复。

src/tss2-esys/esys_crypto_ossl.c:11:10: fatal error: openssl/evp.h: No such file or directory
 #include <openssl/evp.h>
compilation terminated.

make[1]: *** [Makefile:14063: src/tss2-fapi/api/libtss2_fapi_la-Fapi_AuthorizePolicy.lo] Error 1
In file included from ./src/tss2-fapi/fapi_int.h:11, from src/tss2-fapi/api/Fapi_ChangeAuth.c:18:
./src/tss2-fapi/ifapi_policy_instantiate.h:13:10: fatal error: json-c/json.h: No such file or directory
 #include <json-c/json.h>
compilation terminated.

到目前为止,我一直在尝试使用以下命令在bash中编译它:

./bootstrap

export PKG_CONFIG_PATH=/home/me/test/lib/pkgconfig:$PKG_CONFIG_PATH
export LDFLAGS='-L../missing_libs -lssl  -L../missing_libs -lz  -L../missing_libs/json-c/.libs -ljson-c  -L../missing_libs/curl-7.68.0/lib/.libs -lcurl  -L../openssl-1.0.2 -lcrypto'
export CFLAGS='-I../missing_libs/curl-7.68.0/include/lib:../missing_libs/json-c:../missing_libs/openssl-1.0.2'

./configure --prefix=/home/me/test --with-udevrulesdir=/lib/udev --disable-doxygen-doc

make -j$(nproc)

LDFLAGS是包含我的.so和.a文件的文件夹,而CFLAGS是包含我的h文件的文件夹。

我可以检查是否有人知道我未正确链接吗?

谢谢!

c linux compilation pkg-config ldflags
1个回答
0
投票

我发现了问题。显然我链接到错误的位置。

由于库正在搜索,所以我不应该链接到json.h所在的目录,而应该链接到json-c / json.h所在的目录。

因此,对于我的CFLAGS,应为“ -I ../ missing_libs”,而不是“ -I ../ missing_libs / json-c”

感谢乔纳森(Jonathan)的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.