如何 link 非标准位置的库进行编译
How to link Libraries in non-standard locations for compilation
我是 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 文件的文件夹。
我可以检查是否有人知道我链接不正确吗?
谢谢!
我发现了问题。显然我 link 走错地方了。
因为库在搜索,我不应该link到json.h所在的目录,而是json-c/json.h所在的目录。
所以我的 CFLAGS 应该是“-I../missing_libs”而不是“-I../missing_libs/json-c”
感谢乔纳森的帮助!
我是 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 文件的文件夹。
我可以检查是否有人知道我链接不正确吗?
谢谢!
我发现了问题。显然我 link 走错地方了。
因为库在搜索,我不应该link到json.h所在的目录,而是json-c/json.h所在的目录。
所以我的 CFLAGS 应该是“-I../missing_libs”而不是“-I../missing_libs/json-c”
感谢乔纳森的帮助!