【发布时间】:2020-06-10 18:33:25
【问题描述】:
tldr:我如何告诉make 使用library.a 而不是在/usr/local/Cellar/ 中搜索库
我有 2 个 c 库(1 和 2)。我能够为所需的体系结构构建库 1,我想为库 2 做同样的事情。库 2 依赖于库 1。如果我要为我的个人计算机构建库 2,只需安装库 1 就足够了用 brew 然后为库 2 运行我的构建脚本。但是,由于我还必须为其他架构构建,所以它不会那样工作。
我已经成功创建了包含所有需要的架构的 library 1.a 文件,但我找不到任何有关如何让 make 意识到它应该与此文件相关的信息。
for ARCH in ${ARCHS}
do
if [ "${ARCH}" == "i386" ] || [ "${ARCH}" == "x86_64" ]; then
PLATFORM="iPhoneSimulator"
EXTRA_CFLAGS="-arch ${ARCH}"
EXTRA_CONFIG="--host=x86_64-apple-darwin"
else
PLATFORM="iPhoneOS"
EXTRA_CFLAGS="-arch ${ARCH}"
EXTRA_CONFIG="--host=arm-apple-darwin"
fi
mkdir -p "${INTERDIR}/${PLATFORM}${SDKVERSION}-${ARCH}.sdk"
./configure --enable-float-approx --disable-shared --enable-static --with-pic --disable-extra-programs --disable-doc ${EXTRA_CONFIG} \
--prefix="${INTERDIR}/${PLATFORM}${SDKVERSION}-${ARCH}.sdk" \
LDFLAGS="$LDFLAGS ${OPT_LDFLAGS} -fPIE -miphoneos-version-min=${MINIOSVERSION} -L${OUTPUTDIR}/lib" \
CFLAGS="$CFLAGS ${EXTRA_CFLAGS} ${OPT_CFLAGS} -fPIE -miphoneos-version-min=${MINIOSVERSION} -I${OUTPUTDIR}/include -isysroot ${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk" \
make -j4
make install
make clean
done
我在 c 方面不是很有经验 - 我认为这不是一项艰巨的任务,但我根本不知道该谷歌搜索什么。如果您能告诉我需要什么标志/配置或命令将make 引导到library 1.a,那将非常有帮助。
我确实找到了 -L 标志,但是指定文件夹没有帮助,它仍然显示
configure: error: Package requirements (opus >= 1.1) were not met:
No package 'opus' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables DEPS_CFLAGS
and DEPS_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
我尝试添加export DEPS_LIBS=$HOME/Downloads/libopusenc/libopus.a,但它仍然是一样的。它是否还需要 DEPS_CFLAGS 中的某些内容?如果是,如果需要的话,我可以在那里输入什么使其“不为空”?
我是否需要指定库的名称和它正在以某种方式直接搜索的名称?
【问题讨论】:
-
您检查过
configure --help选项吗? -
@Rorschach 感谢您的回复。我现在确实基于
--libdir=$REPOROOT尝试了更多的东西,但我不确定我是否正确使用它们。此外,我发现configure.ac表示PKG_CHECK_MODULES([DEPS], [opus >= 1.1])。我认为这是它失败的一步,不是因为make,而是因为./configure。如果我尝试将其注释掉,它将在下一次./configure调用时自动添加回来。这是有问题的图书馆:github.com/xiph/libopusenc -
configure 脚本用于生成带有特定于您的环境的变量的 makefile,并且对于不同的项目是唯一的 - 因此很难准确猜测需要更改哪些变量(也许是真正的 autotools eficionado) - 链接静态库我认为你不需要调整 CFLAGS,但我不确定
标签: makefile static-libraries configure autotools