QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1398|回复: 8

晕,生成一个动态库却报告符号表与系统库冲突

[复制链接]
发表于 2006-1-4 17:34:41 | 显示全部楼层 |阅读模式
CC         = mipsel-linux-g++
LD         = mipsel-linux-ld
LT         = libtool

CCS     = mipsel-linux-g++ -fPIC -o




...
...
vwtm_api.o:     vwtm_api.cpp vwtm_types.h switches.h \
                vwdebug.h types.h vwtm_api.h scanner.h fifo.h inlines.h threads.h
        $(CCS)  vwtm_api.o $(THREAD) $(DEBUG) vwtm_api.cpp -D PTHREAD=1
.......


libvwtrickmode.so:   vwtm_api.o vwtm_trick.o vwtm_utils.o \
        vwtm_init.o    threads.o mpeg4util.o fifo.o scanner.o   memfile.o
        $(CC) -shared -o  libvwtrickmode.so   vwtm_api.o vwtm_trick.o vwtm_utils.o
        vwtm_init.o threads.o mpeg4util.o fifo.o scanner.o memfile.o

        cp libvwtrickmode.so $(CROSS)/usr/lib/libvwtrickmode.so.1
        ldconfig -n $(CROSS)/usr/lib
        ln -sf $(CROSS)/usr/lib/libvwtrickmode.so.1 $(CROSS)/usr/lib/libvwtrickmode.so
        cp -f libvwtrickmode.so.1 $(BUILDROOT)/staging_dir/lib
发表于 2006-1-4 17:38:34 | 显示全部楼层
提示信息?
回复

使用道具 举报

 楼主| 发表于 2006-1-4 17:42:10 | 显示全部楼层
够简单的了,
编译却报告:


mipsel-linux-g++ -shared -o  libvwtrickmode.so   vwtm_api.o vwtm_trick.o vwtm_utils.o \
vwtm_init.o threads.o mpeg4util.o fifo.o scanner.o memfile.o
vwtm_api.o(.text+0x124): In function `_init':
: multiple definition of `_init'
/home/michael/buildroot/build_mipsel/staging_dir/lib/gcc/mipsel-linux-uclibc/3.4.2/../../../../mipsel-linux-uclibc/lib/crti.o(.init+0x0): first defined here



不单是这一个函数名称的冲突了,
还有好多呢.

两个库用到一个相同的函数名称,
咋办?
回复

使用道具 举报

 楼主| 发表于 2006-1-4 17:47:56 | 显示全部楼层
mipsel-linux-g++ -shared -o  libvwtrickmode.so   vwtm_api.o vwtm_trick.o vwtm_utils.o \
vwtm_init.o threads.o mpeg4util.o fifo.o scanner.o memfile.o
vwtm_api.o(.text+0x124): In function `_init':
: multiple definition of `_init'
/home/michael/buildroot/build_mipsel/staging_dir/lib/gcc/mipsel-linux-uclibc/3.4.2/../../../../mipsel-linux-uclibc/lib/crti.o(.init+0x0): first defined here
vwtm_api.o(.text+0x140): In function `_fini':
: multiple definition of `_fini'
/home/michael/buildroot/build_mipsel/staging_dir/lib/gcc/mipsel-linux-uclibc/3.4.2/../../../../mipsel-linux-uclibc/lib/crti.o(.fini+0x0): first defined here
vwtm_init.o(*ABS*+0x400120): multiple definition of `_DYNAMIC'
/home/michael/buildroot/build_mipsel/staging_dir/lib/gcc/mipsel-linux-uclibc/3.4.2/../../../../mipsel-linux-uclibc/lib/crti.o(.dynamic+0x0): first defined here
vwtm_init.o(.data+0x10): In function `_fdata':
: multiple definition of `__dso_handle'
/home/michael/buildroot/build_mipsel/staging_dir/lib/gcc/mipsel-linux-uclibc/3.4.2/crtbeginS.o(.data.rel+0x0): first defined here
vwtm_init.o(.init+0x0): In function `_init':
: multiple definition of `_init'
/home/michael/buildroot/build_mipsel/staging_dir/lib/gcc/mipsel-linux-uclibc/3.4.2/../../../../mipsel-linux-uclibc/lib/crti.o(.init+0x0): first defined here
vwtm_init.o(.fini+0x0): In function `_fini':
: multiple definition of `_fini'



......
......


这些_init(), _fini(), _fdata(),
是动态库初始化时都用到的吧?
回复

使用道具 举报

 楼主| 发表于 2006-1-4 17:55:53 | 显示全部楼层
再另一个Makefile中

CC         = mipsel-linux-g++
LD         = mipsel-linux-ld
LT         = libtool
COMPILE    = -c -Wno-deprecated
DBG_OPTM  = -g
....
....


srec.o:                 srec.cpp srec.h
        $(CC) -fPIC -o srec.o $(DBG_OPTM) $(COMPILE) srec.cpp

vwSDK_ConfigUtil.o:     vwSDK_ConfigUtil.cpp vwSDK_ConfigUtil.h vwSDK_vw2010impl.h ioctldef.h types.h
        $(CC) -fPIC -o vwSDK_ConfigUtil.o $(DBG_OPTM) $(COMPILE) vwSDK_ConfigUtil.cpp


....
....
libvwSDK.so:    srec.o vwSDK_ConfigUtil.o vwSDK_vw2010impl.o i2ctest.o i2caudvid.o tvtuner.o tuner_api.o
        $(CC) -shared -o libvwSDK.so i2ctest.o i2caudvid.o vwSDK_vw2010impl.o vwSDK_ConfigUtil.o srec.o tvtuner.o tuner_api.o
        cp libvwSDK.so $(CROSS)/usr/lib/libvwSDK.so.1
        ldconfig -n $(CROSS)/usr/lib/
        ln -sf $(CROSS)/usr/lib/libvwSDK.so.1 $(CROSS)/usr/lib/libvwSDK.so
#       cp -f libvwSDK.so OSD
        cp -f libvwSDK.so $(BUILDROOT)/staging_dir/lib




却完全正确.....


恩,
再查查有没有打错字先.
回复

使用道具 举报

 楼主| 发表于 2006-1-4 20:18:12 | 显示全部楼层
用:

ld -shared -soname libvwtrickmode.so -o libvwtrickmode.so.1.0  \
                        vwtm_api.o vwtm_trick.o vwtm_utils.o vwtm_init.o \
                        threads.o mpeg4util.o fifo.o scanner.o memfile.o

则报告:

ld: vwtm_api.o: Relocations in generic ELF (EM:
vwtm_api.o: could not read symbols: File in wrong format
make: *** [libvwtrickmode.so] Error 1
回复

使用道具 举报

 楼主| 发表于 2006-1-4 20:45:43 | 显示全部楼层
晕,
是没有把mips的LINK程序加上去?

LD         = mipsel-linux-ld


      $(LD) -shared -soname libvwtrickmode.so -o libvwtrickmode.so.1.0 -lc \
                        vwtm_api.o vwtm_trick.o vwtm_utils.o vwtm_init.o \
                        threads.o mpeg4util.o fifo.o scanner.o memfile.o


就可以连接通过了.
回复

使用道具 举报

发表于 2006-1-5 09:41:02 | 显示全部楼层
_init是glibc里定义的。
回复

使用道具 举报

 楼主| 发表于 2006-1-5 13:01:29 | 显示全部楼层
恩,
我刚开始时用mips-linux-g++编译,
却用x86-linux-ld链接,
所以出了一堆问题.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-3 00:24 , Processed in 0.046390 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表