有朋友说baidu不到,开个贴记录一下(加粗字体是关键词):
1) 下面是因为没有指定链接参数-lz(/usr/lib/libz.so,/usr/lib/libz.a )
/usr/local/mysql/lib/mysql/libmysqlclient.a(my_compress.c.o): In function `my_uncompress‘:
/home/software/mysql-5.5.24/mysys/my_compress.c:122: undefined reference to `uncompress‘
/usr/local/mysql/lib/mysql/libmysqlclient.a(my_compress.c.o): In function `my_compress_alloc‘:
/home/software/mysql-5.5.24/mysys/my_compress.c:71: undefined reference to `compress‘
2) 下面是因为没有指定编译链接参数-pthread(注意不仅仅是-lpthraed)
/usr/local/mysql/lib/mysql/libmysqlclient.a(charset.c.o): In function `get_charset_name‘:
/home/zhangsan/mysql-5.5.24/mysys/charset.c:533: undefined reference to `pthread_once‘
3) 下面这个是因为没有指定链接参数-lrt
/usr/local/thirdparty/curl/lib/libcurl.a(libcurl_la-timeval.o): In function `curlx_tvnow‘:
timeval.c:(.text+0xe9): undefined reference to `clock_gettime‘
4) 下面这个是因为没有指定链接参数-ldl
/usr/local/thirdparty/openssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup‘:
dso_dlfcn.c:(.text+0x4c): undefined reference to `dlopen‘
dso_dlfcn.c:(.text+0x62): undefined reference to `dlsym‘
dso_dlfcn.c:(.text+0x6c): undefined reference to `dlclose‘
5) 下面这个是因为指定了链接参数-static,它的存在,要求链接的必须是静态库,而不能是共享库
ld: attempted static link of dynamic object
如果是以-L加-l方式指定,则目录下必须有.a文件存在,否则会报-l的库文件找不到:ld: cannot find -lACE
6) GCC编译遇到如下的错误,可能是因为在编译时没有指定-fPIC,记住:-fPIC即是编译参数,也是链接参数
relocation R_x86_64_32S against `vtable for CMyClass` can not be used when making a shared object
7) 下面的错误表示gcc编译时需要定义宏__STDC_FORMAT_MACROS,并且必须包含头文件inttypes.h
test.cpp:35: error: expected `)‘ before ‘PRIu64‘
8) 下面是因为在x86机器(32位)上编译没有指定编译参数-march=pentium4
../../src/common/libmooon.a(logger.o): In function `atomic_dec_and_test‘:
../../include/mooon/sys/atomic_gcc.h:103: undefined reference to `__sync_sub_and_fetch_4‘
C/C++常见编译链接错误解决方法
原文:http://blog.chinaunix.net/uid-20682147-id-5037113.html