- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于我可以进一步检查为什么找不到符号的任何想法,非常感谢。是的,找到了 so lib,路径是在/etc/ld.so.conf 中设置的(http://www.nongnu.org/ruli/)
g++ --版本g++ (GCC) 3.3.3 (SuSE Linux)
g++ -D_xx_ -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”////
./se/yy/xx/business/ss/communication/ServerSocketThread.o ./se/yy/xx/business/ss/communication/SocketThread.o ./se/yy/xx/business/ss/communication/ThreadBase.o -lpthread -lxml2 -lruli -loop -lasn1per -lasn1rt -lmysqlpp
./se/yy/xx/business/ss/communication/ClientSocketThread.o(.text+0xc17): In function `ClientSocketThread::Connect(char const*, char const*, int)':
../se/yy/xx/business/ss/communication/ClientSocketThread.cpp:152: undefined reference to `ruli_sync_query(char const*, char const*, int, long)'
./se/yy/xx/business/ss/communication/ClientSocketThread.o(.text+0xdb1):../se/yy/xx/business/ss/communication/ClientSocketThread.cpp:161: undefined reference to `ruli_sync_srv_code(ruli_sync_t const*)'
./se/yy/xx/business/ss/communication/ClientSocketThread.o(.text+0xf55):../se/yy/xx/business/ss/communication/ClientSocketThread.cpp:173: undefined reference to `ruli_sync_rcode(ruli_sync_t*)'
./se/yy/xx/business/ss/communication/ClientSocketThread.o(.text+0x1123):../se/yy/xx/business/ss/communication/ClientSocketThread.cpp:185: undefined reference to `ruli_sync_srv_list(ruli_sync_t*)'
./se/yy/xx/business/ss/communication/ClientSocketThread.o(.text+0x113a):../se/yy/xx/business/ss/communication/ClientSocketThread.cpp:186: undefined reference to `ruli_list_size(ruli_list_t const*)'
./se/yy/xx/business/ss/communication/ClientSocketThread.o(.text+0x14ad):../se/yy/xx/business/ss/communication/ClientSocketThread.cpp:204: undefined reference to `ruli_list_get(ruli_list_t const*, int)'
./se/yy/xx/business/ss/communication/ClientSocketThread.o(.text+0x14d5):../se/yy/xx/business/ss/communication/ClientSocketThread.cpp:206: undefined reference to `ruli_list_size(ruli_list_t const*)'
./se/yy/xx/business/ss/communication/ClientSocketThread.o(.text+0x150b):../se/yy/xx/business/ss/communication/ClientSocketThread.cpp:213: undefined reference to `ruli_dname_decode(char*, int, int*, char const*, int)'
./se/yy/xx/business/ss/communication/ClientSocketThread.o(.text+0x1753):../se/yy/xx/business/ss/communication/ClientSocketThread.cpp:225: undefined reference to `ruli_list_get(ruli_list_t const*, int)'
./se/yy/xx/business/ss/communication/ClientSocketThread.o(.text+0x176a):../se/yy/xx/business/ss/communication/ClientSocketThread.cpp:226: undefined reference to `ruli_addr_family(ruli_addr_t const*)'
./se/yy/xx/business/ss/communication/ClientSocketThread.o(.text+0x17a7):../se/yy/xx/business/ss/communication/ClientSocketThread.cpp:229: undefined reference to `ruli_in_snprint(char*, unsigned, _ruli_addr const*, int)'
collect2: ld returned 1 exit status
make: *** [SlisServer] Error 1
sudo ldd /usr/local/lib/libruli.so
linux-gate.so.1 => (0xffffe000)
liboop.so.4 => /usr/local/lib/liboop.so.4 (0x40025000)
libdl.so.2 => /lib/libdl.so.2 (0x4002c000)
libc.so.6 => /lib/tls/libc.so.6 (0x40030000)
/lib/ld-linux.so.2 (0x80000000)
据我所知,lib 中的所有符号看起来都不错
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
Har testat att läggatil en av funktionsanropen (剪切/粘贴 samma kod) i en av test funktionerna i ruli lib och det länkar utan Problem mot samma 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.so
中定义的符号具有 extern "C"
链接。
您未解析的符号具有 C++
链接(请注意链接器如何列出函数参数类型)。
正如 chill 正确猜测的那样,这意味着 libruli
附带的 header 没有适当的 C++
防护。要解决此问题,请不要执行此操作(在 C++ 代码中):
#include "libruli.h"
这样做:
extern "C" {
#include "libruli.h"
}
或者,修复 libruli.h
本身(并向其开发人员发送补丁):
#ifdef __cplusplus
extern "C" {
#endif
... original content goes here ...
#ifdef __cplusplus
}
#endif
关于linker - 未找到链接 libruli.so 的 g++ 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13509985/
我的makefile的一部分看起来像这样...... ifdef vis flg += -framework GLUT -framework OpenGL -Dvis obj += camfun.o
我正在尝试将 MPI 与 D 编程语言结合使用。 D 完全支持 C ABI,可以链接和调用任何 C 代码。我已经完成了显而易见的工作并将 MPI header 翻译为 D。然后我翻译了 a test
我研究了 makefile 项目。我正在使用 gnu gcc 并作为链接器,我使用带有以下参数的 gcc: linkerCmdLine=$(exe) -Wl,--start-group -nostdl
我尝试使用 FMDB 数据库,但出现错误: Undefined symbols for architecture i386: "_OBJC_CLASS_$_FMDatabase", referen
我想知道“本地链接器符号”和“本地程序变量”之间的区别? 我正在读一本书,里面有这样的: alt text http://img682.imageshack.us/img682/9816/symbol
假设我正在使用 clang 构建和链接我的应用程序 clang -I/usr/local/include -c -o app.o main.c clang -L/usr/local/lib -o ap
我正在从程序员的角度阅读计算机系统,关于链接的章节。它解释了如何使用程序 ld 在 linux x86-64 中进行链接。作者声称,为了从可重定位的目标文件构建可执行文件,链接器做了两件事:符号解析和
所以,这是我发现自己想到的任务。假装一下,我有大量的内容。我想查看哪些网站链接到我的内容。我知道我可以研究 TrackBack 或 PingBack,但是那些不使用能够处理这些问题的工具的人呢? 似乎
我认为 动态加载意味着在加载或运行时将库(或任何其他二进制文件)加载到内存中。所以在下面的程序中,当 dlopen() 调用动态加载器时,它会出现,如果库尚未加载,它会将库加载到内存中。 动态链接是指
我想澄清我对共享库的困惑。当我在网上搜索时,我在对静态链接的解释中发现,由于库包含在可执行文件本身中,因此它会导致更大的可执行文件,从而增加程序的内存占用。 而在动态库/共享库的情况下,库是在运行时链
我正在开发一个嵌入式系统(Stellaris Launchpad)并编写一个简单的操作系统(作为一个爱好项目)。使用的工具链是 gcc-none-eabi。 我的下一步是习惯 MPU 以允许内核阻止用
我正在与 JNI 合作。我有一个包装库 (wrapper.so),它使用两个共享库:one.so 和 two.so 一切正常。所有 *.so 都在 lib 文件夹中,在程序文件夹内。 问题是,如果我将
使用通过“node-gyp”传递的链接器命令行选项,我指定了我希望程序链接的库路径和库名称。但是生成的可执行文件没有引用我指定的文件,它在 /usr/lib 中引用了一个不同的名称。 . 我正在使用
我正在为 AWS lambda 开发 native 节点模块。此节点模块需要 json-c 根据 AWS lambda guidelines节点模块不应具有动态依赖关系。所以尝试链接json-c库的静
我想配置一个自动工具化的项目来调用一个非标准的 链接器( gold linker ), 使用 Linux Mint 16/Ubuntu 13.10 的库存自动工具 我相信我会通过以下方式实现这一目标:
要将可执行文件与位于标准位置的库链接,可以在 CmakeLists.txt 文件中执行以下操作: create_executable(generate_mesh generate_mesh.cpp)
链接描述脚本是否可以访问makefile/shell变量并根据所述变量做出决定? 例如,假设我想在不使用其他链接程序脚本的情况下更改下面RAM区域的开始,是否可以使用make变量来执行此操作? MEM
第三方为我提供了一个静态lib(.a)以便与solaris站链接。 我尝试使用sunpro进行编译,但在链接步骤失败。 我想问题出在我使用的编译器(而不是gcc?)或它的版本(由于编译器提供的std
当我们编译代码时,将生成一个目标文件。在链接过程中,从该目标文件生成一个可执行文件。 为什么我们需要一个目标文件?目标文件有什么用?不可能直接生成可执行文件吗?毕竟,我们使用可执行文件来运行该程序。
我知道头文件包含函数和变量的声明,它们在编译期间帮助判断输入的参数是否有效。 所有的库函数都是默认链接的吗? //#include //#include int main() { printf
我是一名优秀的程序员,十分优秀!