当前位置: 技术问答>linux和unix
动态库调用静态库,编译时出错
来源: 互联网 发布时间:2016-03-25
本文导语: 系统环境:Solaris 9 Makefile如下: ... CC=g++ CFLASS=-Wall -o -g -fpic BaseChar.o: BaseChar.cpp BaseChar.h jpeglib.h $(CC) $(CFLASS) -c BaseChar.cpp -o BaseChar.o ... 以上编译通过。 g++ BaseChar.o libjpeg.a -shared -o libBMP.so //编译...
系统环境:Solaris 9
Makefile如下:
...
CC=g++
CFLASS=-Wall -o -g -fpic
BaseChar.o: BaseChar.cpp BaseChar.h jpeglib.h
$(CC) $(CFLASS) -c BaseChar.cpp -o BaseChar.o
...
以上编译通过。
g++ BaseChar.o libjpeg.a -shared -o libBMP.so //编译时出错,如下
文本重定位持续 引用的
针对符号 位移 在文件中
0x43 libjpeg.a(jerror.o)
error_exit 0x16c libjpeg.a(jerror.o)
emit_message 0x173 libjpeg.a(jerror.o)
output_message 0x17a libjpeg.a(jerror.o)
format_message 0x181 libjpeg.a(jerror.o)
reset_error_mgr 0x188 libjpeg.a(jerror.o)
...
...
exit 0x20 libjpeg.a(jerror.o)
jpeg_std_message_table 0x1a4 libjpeg.a(jerror.o)
jpeg_destroy 0x14 libjpeg.a(jerror.o)
__iob 0x48 libjpeg.a(jerror.o)
fprintf 0x4d libjpeg.a(jerror.o)
sprintf 0xfd libjpeg.a(jerror.o)
sprintf 0x143 libjpeg.a(jerror.o)
ld: 致命的: 重定位仍旧与可分配但不可写的节相反
collect2: ld returned 1 exit status
*** Error code 1
make: Fatal error: Command failed for target `libBMP'
什么缘故???
本应当g++ BaseChar.o -L. -ljpeg -shared -o libBMP.so 的,但Soraris9 不支持‘-L.’,也不识别-ljpeg,所以只能
g++ BaseChar.o libjpeg.a -shared -o libBMP.so 了。
Makefile如下:
...
CC=g++
CFLASS=-Wall -o -g -fpic
BaseChar.o: BaseChar.cpp BaseChar.h jpeglib.h
$(CC) $(CFLASS) -c BaseChar.cpp -o BaseChar.o
...
以上编译通过。
g++ BaseChar.o libjpeg.a -shared -o libBMP.so //编译时出错,如下
文本重定位持续 引用的
针对符号 位移 在文件中
0x43 libjpeg.a(jerror.o)
error_exit 0x16c libjpeg.a(jerror.o)
emit_message 0x173 libjpeg.a(jerror.o)
output_message 0x17a libjpeg.a(jerror.o)
format_message 0x181 libjpeg.a(jerror.o)
reset_error_mgr 0x188 libjpeg.a(jerror.o)
...
...
exit 0x20 libjpeg.a(jerror.o)
jpeg_std_message_table 0x1a4 libjpeg.a(jerror.o)
jpeg_destroy 0x14 libjpeg.a(jerror.o)
__iob 0x48 libjpeg.a(jerror.o)
fprintf 0x4d libjpeg.a(jerror.o)
sprintf 0xfd libjpeg.a(jerror.o)
sprintf 0x143 libjpeg.a(jerror.o)
ld: 致命的: 重定位仍旧与可分配但不可写的节相反
collect2: ld returned 1 exit status
*** Error code 1
make: Fatal error: Command failed for target `libBMP'
什么缘故???
本应当g++ BaseChar.o -L. -ljpeg -shared -o libBMP.so 的,但Soraris9 不支持‘-L.’,也不识别-ljpeg,所以只能
g++ BaseChar.o libjpeg.a -shared -o libBMP.so 了。
|
编译libjpeg时加上-fPIC选项试试。