Makefile无法链接由C ++编写的共享库.la

时间:2013-06-25 07:52:05

标签: c++ makefile shared-libraries autotools

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

我的意思是通过示例将-L / my_shared_library_path / mylib.so添加到libclamav_la_LIBADD来将共享库链接到Makefile。

  

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'的未定义引用

1 个答案:

答案 0 :(得分:1)

您问题中引用的文字显然属于依赖于pkg-config的autoconf打包的Makefile.am(或Makefile.in)。如果这是您在Makefile中的文字,那么您还有许多问题需要处理。由于@LIBCLAMAV_LIBS@已经显示libclamav_la_LIBADD,因此您需要配置pkg-config以发出正确的标记,以便在配置时找到您的库。

将机器特定代码放在Makefile.am(或Makefile.in)中永远不合适。由于my_shared_libary_path特定于您的框,因此通过pkg-configCPPFLAGS期间添加到LDFLAGSconfigure的相应标记的适当方式是-I }。 (注意:autoconf派生包装中的CPPFLAGS个标记位于CFLAGS而不是configure ... LDFLAGS=-L/my/shared/library/path CPPFLAGS=-I/my_include/src/wraper

如果您确实运行了configure,请尝试:

{{1}}