TIP链接错误link error

作者: 羽飞 2017-01-30 09:57:57

环境


OS:linux 3.13.0


gcc:4.8.2


code:sqlite-3.5.3


 


详细信息


执行的编译命令


gcc -fpic -ftemplate-depth-64 -m64 -DLINUX -DLINUX_X86 -DOPENBOSS -DV20 -DGANSU -D_REENTRANT -D__OPENBOSS_NGMAKE__ -D_THREAD_SAFE -DPTHREADS -


DTHREAD -D_RWSTD_MULTI_THREAD -D_GNU_SOUORCE -I. -lpthread -lrt -ldl alter.o analyze.o attach.o auth.o btmutex.o btree.o build.o callback.


o complete.o date.o delete.o expr.o func.o hash.o insert.o journal.o loadext.o main.o malloc.o mem1.o mem2.o mem3.o mutex.o mutex_os2.o mutex_unix.o


mutex_w32.o opcodes.o os.o os_os2.o os_unix.o os_win.o pager.o parse.o pragma.o prepare.o printf.o random.o select.o table.o tokenize.o trigger.o


update.o util.o vacuum.o vdbe.o vdbeapi.o vdbeaux.o vdbeblob.o vdbefifo.o vdbemem.o where.o utf.o legacy.o vtab.o shell.o -o sqlite3


注意:链接库命令已经加了pthread、rt和dl链接库


 


错误信息


mutex_unix.o: In function `sqlite3_mutex_alloc':


mutex_unix.c:(.text+0x47): undefined reference to `pthread_mutexattr_init'


mutex_unix.c:(.text+0x58): undefined reference to `pthread_mutexattr_settype'


mutex_unix.c:(.text+0x77): undefined reference to `pthread_mutexattr_destroy'


mutex_unix.o: In function `sqlite3_mutex_try':


mutex_unix.c:(.text+0x179): undefined reference to `pthread_mutex_trylock'


os_unix.o: In function `testThreadLockingBehavior':


os_unix.c:(.text+0x124): undefined reference to `pthread_create'


os_unix.c:(.text+0x14b): undefined reference to `pthread_create'


os_unix.c:(.text+0x15c): undefined reference to `pthread_join'


os_unix.c:(.text+0x16d): undefined reference to `pthread_join'


os_unix.o: In function `unixDlOpen':


os_unix.c:(.text+0x1940): undefined reference to `dlopen'


os_unix.o: In function `unixDlError':


os_unix.c:(.text+0x1964): undefined reference to `dlerror'


os_unix.o: In function `unixDlSym':


os_unix.c:(.text+0x19c3): undefined reference to `dlsym'


os_unix.o: In function `unixDlClose':


os_unix.c:(.text+0x19e1): undefined reference to `dlclose'


collect2: error: ld returned 1 exit status


错误信息明显是因为没有添加pthread和dl引起的,这个错误在GCC 4.4.6上编译没有问题,也没有找到原因为什么会出现错误,不过最后还是解决了,最后使用了下面的命令。


 


正确的命令


gcc -fpic -ftemplate-depth-64 -m64 -DLINUX -DLINUX_X86 -DOPENBOSS -DV20 -DGANSU -D_REENTRANT -D__OPENBOSS_NGMAKE__ -D_THREAD_SAFE -DPTHREADS -


DTHREAD -D_RWSTD_MULTI_THREAD -D_GNU_SOUORCE -I. -lrt alter.o analyze.o attach.o auth.o btmutex.o btree.o build.o callback.o complete.o date.o


delete.o expr.o func.o hash.o insert.o journal.o loadext.o main.o malloc.o mem1.o mem2.o mem3.o mutex.o mutex_os2.o mutex_unix.o mutex_w32.o opcodes.


o os.o os_os2.o os_unix.o os_win.o pager.o parse.o pragma.o prepare.o printf.o random.o select.o table.o tokenize.o trigger.o update.o util.o vacuum.


o vdbe.o vdbeapi.o vdbeaux.o vdbeblob.o vdbefifo.o vdbemem.o where.o utf.o legacy.o vtab.o shell.o -o sqlite3 -lpthread -ldl


与前面不同的就是把pthread和dl放到了后面而已。


GCC从4.4升级到4.8后还遇到一些链接库递归依赖的问题。


比如:


A 依赖 B和C


B 依赖 C


在4.4版本的GCC中,A的Makefile中只需要指定A依赖B就可以了,但是4.8要明确指出A依赖B和C。


 


本文永久更新地址:http://www.linuxdiyf.com/linux/28044.html

相关资讯