【问题标题】:Makefile cannot link share library .la that wrote by C++Makefile 无法链接 C++ 编写的共享库 .la
【发布时间】:2013-06-25 07:52:05
【问题描述】:

Makefile 包含创建 libclamav 的 .la 扩展文件。

libclamav_la_LIBADD = @LIBLTDL@ $(IFACELIBADD) $(LLVMLIBADD) libclamav_internal_utils.la @LIBCLAMAV_LIBS@ @THREAD_LIBS@ @LIBM@

libclamav_la_DEPENDENCIES = @LTDLDEPS@ $(IFACEDEP) $(LLVMDEP) libclamav_internal_utils.la

libclamav_la_CFLAGS = -I../my_include/src/wrapper -DSEARCH_LIBDIR=\"$(libdir)\"

libclamav_la_LDFLAGS = -L/usr/lib32 -lOpenCL @TH_SAFE@ -version-info @LIBCLAMAV_VERSION@ -no-undefined

我的观点是将共享库链接到 Makefile,例如将 -L/my_shared_library_path/mylib.so 添加到 libclamav_la_LIBADD。

libclamav_la_LDFLAGS = -L/my_shared_library_path/ -lmylib @TH_SAFE@ -version-info @LIBCLAMAV_VERSION@ -no-undefined

Makefile 不能通过错误来喜欢成员函数名称。

../libclamav/.libs/libclamav.so:未定义对“member_function_in_mylib.so”的引用

【问题讨论】:

  • 你能否使用这些标志在命令行上成功执行链接(即没有生成文件)?

标签: c++ makefile shared-libraries autotools


【解决方案1】:

您问题中引用的文本显然属于依赖 pkg-config 的自动配置打包的 Makefile.am(或 Makefile.in)。如果这是您在Makefile 中的文本,那么您还有更多问题需要处理。由于@LIBCLAMAV_LIBS@ 已经出现在libclamav_la_LIBADD 中,您需要配置pkg-config 以在配置时发出正确的标志来定位您的库。

将特定于机器的代码放在Makefile.am(或Makefile.in)中是不合适的。由于my_shared_libary_path 特定于您的盒子,因此将相关标志放入构建的适当方法是通过pkg-config 或在configure 期间添加CPPFLAGSLDFLAGS。 (注意:autoconf 派生打包中的-I 标志进入CPPFLAGS 而不是CFLAGS

如果您确实运行过配置,请尝试:

configure ... LDFLAGS=-L/my/shared/library/path CPPFLAGS=-I/my_include/src/wraper

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    相关资源
    最近更新 更多