初学automake 关于静态库包含静态库的有关问题
初学automake 关于静态库包含静态库的问题
现在我要生成一个libPlatform.a的静态库,这个库又依赖于两个第三方的静态库libuuid.a libiconv.a
以下是Makefile.am的代码
其中两个第三方库是放在../Libs/Lin/中,头文件是放在../Includes中
执行make以后,最后能生成libPlatform.a
打印的信息是
但执行nm libPlatform.a时,提示:
nm: libuuid.a: 不可识别的文件格式
nm: libiconv.a: 不可识别的文件格式
而第三方库中的函数也是未定义状态,如
U libiconv
U libiconv_close
U libiconv_open
U uuid_generate
请问我在Makefile.am中缺了什么参数吗?我把这个项目编译成libPlatform.so的话,是能成功链接的。
------解决方案--------------------
you can't archive .a in a .a. In other words, you can't put an archive (static lib) into another archive.
../Libs/Lin/libuuid.a ../Libs/Lin/libiconv.a
Archive file is for containing object file only...
现在我要生成一个libPlatform.a的静态库,这个库又依赖于两个第三方的静态库libuuid.a libiconv.a
以下是Makefile.am的代码
## Process this file with automake to produce Makefile.in
lib_LIBRARIES = libPlatform.a
AM_CPPFLAGS=-I../Includes
AM_LDFLAGS = -lpthread -ldl -lrt
libPlatform_a_SOURCES= Lin/CMonitoredSection.cpp \
Lin/COsDirectory.cpp \
Lin/COsLog.cpp \
Lin/COsSemaphore.cpp \
Lin/COsSocket.cpp \
Lin/COsSystemTime.cpp \
Lin/COsThread.cpp \
Lin/CSerialPort.cpp \
Lin/Platform.cpp \
Lin/PlatformFS.cpp \
Lin/stdafx.cpp \
stdutil.cpp \
Lin/COsGuid.cpp \
Lin/COsLibrary.cpp \
Lin/PlatformString.cpp \
Lin/COsAdapter.cpp \
Lin/COsMailbox.hpp \
Lin/LinPlatform.h \
Lin/PlatformFS.h \
Lin/PlatformStdio.h \
Lin/stdafx.h \
Lin/targetver.h \
CMonitoredSection.h \
COsDirectory.h \
COsGuid.h \
COsLibrary.h \
COsLog.h \
COsMailbox.h \
COsSemaphore.h \
COsSerial.h \
COsSocket.h \
COsSystemTime.h \
COsThread.h \
CSerialPort.h \
platform.h \
stdutil.h \
PlatformString.h \
COsAdapter.h
##libPlatform_a_LDFLAGS =
##libPlatform_so_LDFLAGS = -fPIC -shared
libPlatform_a_LIBADD=../Libs/Lin/libuuid.a ../Libs/Lin/libiconv.a
libPlatform_a_CXXFLAGS=-DLINUX -DLIBICONV_STATIC
其中两个第三方库是放在../Libs/Lin/中,头文件是放在../Includes中
执行make以后,最后能生成libPlatform.a
打印的信息是
ar cru libPlatform.a libPlatform_a-CMonitoredSection.o libPlatform_a-COsDirectory.o libPlatform_a-COsLog.o libPlatform_a-COsSemaphore.o libPlatform_a-COsSocket.o libPlatform_a-COsSystemTime.o libPlatform_a-COsThread.o libPlatform_a-CSerialPort.o libPlatform_a-Platform.o libPlatform_a-PlatformFS.o libPlatform_a-stdafx.o libPlatform_a-stdutil.o libPlatform_a-COsGuid.o libPlatform_a-COsLibrary.o libPlatform_a-PlatformString.o libPlatform_a-COsAdapter.o ../Libs/Lin/libuuid.a ../Libs/Lin/libiconv.a
ranlib libPlatform.a
但执行nm libPlatform.a时,提示:
nm: libuuid.a: 不可识别的文件格式
nm: libiconv.a: 不可识别的文件格式
而第三方库中的函数也是未定义状态,如
U libiconv
U libiconv_close
U libiconv_open
U uuid_generate
请问我在Makefile.am中缺了什么参数吗?我把这个项目编译成libPlatform.so的话,是能成功链接的。
------解决方案--------------------
you can't archive .a in a .a. In other words, you can't put an archive (static lib) into another archive.
../Libs/Lin/libuuid.a ../Libs/Lin/libiconv.a
Archive file is for containing object file only...