当前位置: 技术问答>linux和unix
初学automake 关于静态库包含静态库的问题
来源: 互联网 发布时间:2017-05-23
本文导语: 现在我要生成一个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_LD...
现在我要生成一个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的话,是能成功链接的。
以下是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...
../Libs/Lin/libuuid.a ../Libs/Lin/libiconv.a
Archive file is for containing object file only...