Linker g++;未找到链接libruli.so的符号
关于为什么没有找到这些符号,我能查到更多的想法,真是太好了。是的,在/etc/ld.so.conf中设置了so库 (http://www.nongnu.org/ruli/) g++--版本 g++(GCC)3.3.3(SuSE Linux) g++-D_xx_uu-I../se/yy/xx/business/ss/utility/asn-I/usr/local/include/mysql++-I/usr/include/mysql-O0-g3-Wall-c-fmessage length=0-MMD-MP-MF“se/yy/xx/business/ss/communication/ClientSocketThread.D”—MT“se/yy/xx/business/ss/communication/ClientSocketThread.D”—o“se/yy/nn是/business/ss/communication/ClientSocketThread.o”“../se/yy/xx/business/ss/communication/ClientSocketThread.cpp” //// 就我所见,所有符号在库中看起来都正常Linker g++;未找到链接libruli.so的符号,linker,g++,shared-objects,Linker,G++,Shared Objects,关于为什么没有找到这些符号,我能查到更多的想法,真是太好了。是的,在/etc/ld.so.conf中设置了so库 (http://www.nongnu.org/ruli/) g++--版本 g++(GCC)3.3.3(SuSE Linux) g++-D_xx_uu-I../se/yy/xx/business/ss/utility/asn-I/usr/local/include/mysql++-I/usr/include/mysql-O0-g3-Wall-c-fmessage length=0-M
sudo readelf -Ws /usr/local/lib/libruli.so | grep ruli_sync
65: 0000ee90 373 FUNC GLOBAL DEFAULT 11 ruli_sync_smtp_query@@libruli4
105: 0000eb90 103 FUNC GLOBAL DEFAULT 11 ruli_sync_rcode@@libruli4
126: 0000ed10 376 FUNC GLOBAL DEFAULT 11 ruli_sync_http_query@@libruli4
127: 0000eb20 103 FUNC GLOBAL DEFAULT 11 ruli_sync_srv_list@@libruli4
162: 0000ec00 103 FUNC GLOBAL DEFAULT 11 ruli_sync_srv_code@@libruli4
197: 0000f010 373 FUNC GLOBAL DEFAULT 11 ruli_sync_query@@libruli4
236: 0000ec70 158 FUNC GLOBAL DEFAULT 11 ruli_sync_delete@@libruli4
sudo readelf -Ws /usr/local/lib/libruli.so | grep ruli_list
35: 00004c20 66 FUNC GLOBAL DEFAULT 11 ruli_list_capacity@@libruli4
63: 00004cf0 170 FUNC GLOBAL DEFAULT 11 ruli_list_clean@@libruli4
64: 00004ea0 217 FUNC GLOBAL DEFAULT 11 ruli_list_dispose@@libruli4
74: 000050b0 67 FUNC GLOBAL DEFAULT 11 ruli_list_new@@libruli4
75: 00004c70 127 FUNC GLOBAL DEFAULT 11 ruli_list_size@@libruli4
92: 0001201c 4 OBJECT GLOBAL DEFAULT 14 ruli_list_malloc@@libruli4
99: 00004b90 140 FUNC GLOBAL DEFAULT 11 ruli_list_push@@libruli4
100: 000048b0 271 FUNC GLOBAL DEFAULT 11 ruli_list_shift_at@@libruli4
104: 00012014 4 OBJECT GLOBAL DEFAULT 14 ruli_list_free@@libruli4
108: 00004da0 140 FUNC GLOBAL DEFAULT 11 ruli_list_clean_trivial@@libruli4
118: 00004820 131 FUNC GLOBAL DEFAULT 11 ruli_list_top@@libruli4
133: 00012018 4 OBJECT GLOBAL DEFAULT 14 ruli_list_realloc@@libruli4
134: 00004f80 150 FUNC GLOBAL DEFAULT 11 ruli_list_dispose_trivial@@libruli4
140: 00004790 133 FUNC GLOBAL DEFAULT 11 ruli_list_pop@@libruli4
156: 000044b0 23 FUNC GLOBAL DEFAULT 11 ruli_list_errstr@@libruli4
161: 000046e0 176 FUNC GLOBAL DEFAULT 11 ruli_list_drop@@libruli4
169: 00004e30 112 FUNC GLOBAL DEFAULT 11 ruli_list_delete@@libruli4
209: 00005020 142 FUNC GLOBAL DEFAULT 11 ruli_list_new_cap@@libruli4
220: 00004580 165 FUNC GLOBAL DEFAULT 11 ruli_list_set@@libruli4
222: 00004a70 274 FUNC GLOBAL DEFAULT 11 ruli_list_insert_at@@libruli4
232: 00004630 162 FUNC GLOBAL DEFAULT 11 ruli_list_get@@libruli4
235: 000044d0 161 FUNC GLOBAL DEFAULT 11 ruli_list_prune@@libruli4
sudo readelf -Ws /usr/local/lib/libruli.so | grep ruli_dname_decode
229: 00006de0 256 FUNC GLOBAL DEFAULT 11 ruli_dname_decode@@libruli4
sudo readelf -Ws /usr/local/lib/libruli.so | grep ruli_in_snp
165: 00005f00 125 FUNC GLOBAL DEFAULT 11 ruli_in_snprint@@libruli4
直到av功能测试(剪切/粘贴samma kod)和av测试功能测试(ruli lib)出现问题时,才进行测试
gcc -O2 -pipe -Wall -g -I../src -I/usr/local/oop/include -c srvsearch.c
gcc -O2 -pipe -Wall -g -I../src -I/usr/local/oop/include -c parse_options.c
gcc -O2 -pipe -Wall -g -I../src -I/usr/local/oop/include -c stdout_srv_list.c
gcc -L../src -L/usr/local/oop/lib -o srvsearch srvsearch.o parse_options.o stdout_srv_list.o -lruli -loop
gcc -O2 -pipe -Wall -g -I../src -I/usr/local/oop/include -c sync_srvsearch.c
gcc -L../src -L/usr/local/oop/lib -o sync_srvsearch sync_srvsearch.o parse_options.o stdout_srv_list.o -lruli -loop
gcc -O2 -pipe -Wall -g -I../src -I/usr/local/oop/include -c smtpsearch.c
gcc -L../src -L/usr/local/oop/lib -o smtpsearch smtpsearch.o parse_options.o stdout_srv_list.o -lruli -loop
gcc -O2 -pipe -Wall -g -I../src -I/usr/local/oop/include -c sync_smtpsearch.c
gcc -L../src -L/usr/local/oop/lib -o sync_smtpsearch sync_smtpsearch.o parse_options.o stdout_srv_list.o -lruli -loop
gcc -O2 -pipe -Wall -g -I../src -I/usr/local/oop/include -c sync_httpsearch.c
gcc -L../src -L/usr/local/oop/lib -o sync_httpsearch sync_httpsearch.o parse_options.o stdout_srv_list.o -lruli -loop
gcc -O2 -pipe -Wall -g -I../src -I/usr/local/oop/include -c httpsearch.c
gcc -L../src -L/usr/local/oop/lib -o httpsearch httpsearch.o parse_options.o stdout_srv_list.o -lruli -loop
gcc -O2 -pipe -Wall -g -I../src -I/usr/local/oop/include -c ruli-getaddrinfo.c
ruli-getaddrinfo.c: In function `main':
ruli-getaddrinfo.c:60: warning: `sync_query' might be used uninitialized in this function
gcc -O2 -pipe -Wall -g -I../src -I/usr/local/oop/include -c addrprint.c
gcc -L../src -L/usr/local/oop/lib -o ruli-getaddrinfo ruli-getaddrinfo.o addrprint.o parse_options.o -lruli -loop
gcc -O2 -pipe -Wall -g -I../src -I/usr/local/oop/include -c getaddrinfo.c
gcc -O2 -pipe -Wall -g -I../src -I/usr/local/oop/include -c run_getaddrinfo.c
gcc -L../src -L/usr/local/oop/lib -o getaddrinfo getaddrinfo.o run_getaddrinfo.o addrprint.o parse_options.o -ldl
非常适合任何提示在
libruli中定义的符号。因此具有外部“C”
链接
未解析的符号具有C++
链接(请注意链接器如何列出函数参数类型)
作为正确的猜测,这意味着,在“代码> >库中< /code >下的标题没有正确的<代码> C++ >代码>守护程序。为了解决这个问题,不要这样做(C++代码):
改为这样做:
extern "C" {
#include "libruli.h"
}
或者,修复libruli.h
本身(并向其开发人员发送补丁):
Ruli头是否适合包含在C++源文件中?<代码>外“C”<代码>和其他内容?
#include "libruli.h"
extern "C" {
#include "libruli.h"
}
#ifdef __cplusplus
extern "C" {
#endif
... original content goes here ...
#ifdef __cplusplus
}
#endif