gpt4 book ai didi

linux - 链接到静态库后 undefined reference

转载 作者:IT王子 更新时间:2023-10-29 01:15:53 25 4
gpt4 key购买 nike

我写了一个简单的程序来测试 xdotool 是否可以满足我的要求。 (嗯,不是真的。我的第一步是确保我是否可以调用 xdotool 库。)

#include <xdo.h>
#include <iostream>

using namespace std;

int main(){
cout << xdo_version() << endl;
xdo_new(NULL);
return 0;
}

但是,当我使用 g++ -o a main.cpp libxdo.a -lXtst -lX11 -lXinerama -I ../test/xdotool-2.20110530.1 编译时,出现以下错误留言:

/tmp/ccW95RQx.o: In function `main':
main.cpp:(.text+0x5): undefined reference to `xdo_version()'
main.cpp:(.text+0x29): undefined reference to `xdo_new(char*)'
collect2: error: ld returned 1 exit status
make: *** [sendkey] Error 1

我没有使用 apt-get install 中的开发包,因为它安装了一个动态库。所以,我做了一个 apt-get 源并自己构建了库。我通过执行以下命令验证了 xdo_version 和 xdo_new 是静态库中定义的函数:

$ nm libxdo.a | grep xdo_version
00000000000002b0 T xdo_version
$ nm libxdo.a | grep xdo_new
0000000000004070 T xdo_new
0000000000003c90 T xdo_new_with_opened_display

如果我没记错的话,符号名称旁边的 T 表示函数已定义。

总而言之,我试图让上面的 C++ 片段成功编译并静态链接到 xdotool,但遇到了一些如上所述的错误。

最佳答案

提示:如果链接器显示函数的签名,那么它就知道该函数的签名。这是什么意思?这意味着它在编译时已经以某种方式编码在函数名称中,即。 e.你是 C++ 的受害者 name mangling .

xdo.h header 似乎不包含针对 C 代码编译为 C++ 的情况的保护措施。自己手动将函数声明为extern "C",然后重新编译,就可以了。

关于linux - 链接到静态库后 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16696592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com