"未定义的参考dlopen"当与gcc静态链接时

时间:2017-01-07 00:59:23

标签: c++ linux gcc static-linking luajit

在阅读了大量的gcc docomentation和类似的问题后,我的问题仍然存在 我试图将我的libluajit.a静态链接到我的项目中,但无论我尝试哪种命令组合,都会弹出一个或另一个错误。我已经用动态链接成功编译了我的项目 现在我没有想法,所以我现在得到了什么:

./LuaHost/LuaSrc/libluajit.a(lj_clib.o): In function `lj_clib_index':
lj_clib.c:(.text+0x1c0): undefined reference to `dlsym'
./LuaHost/LuaSrc/libluajit.a(lj_clib.o): In function `lj_clib_load':
lj_clib.c:(.text+0x2c8): undefined reference to `dlopen'
lj_clib.c:(.text+0x350): undefined reference to `dlerror'
lj_clib.c:(.text+0x424): undefined reference to `dlopen'

还有一些错误:

{
  "server.urls": "http://localhost:5010;http://localhost:5012"
}

libluajit.a已经在同一台机器上编译,一个RaspberryPi。

1 个答案:

答案 0 :(得分:1)

我认为-static不是你追求的。 -static将构建static application并且意味着link this static library to the application

这里有一些选择。当您与-lluajit关联时,您可以删除该库的动态.so版本。 gcc将默认为动态链接,但在动态库不可用或未找到时将回退到静态链接。

而不是-lluajit,您可以直接指向静态库文件 - 将其视为对象输入文件:/usr/lib/libluajit.a

我认为推荐的方法是告诉链接器如何链接你的库。尝试使用-Wl,-Bstatic -lluajit。您可以在库名称前面的BstaticBdynamic之间切换,以防您链接到多个库并希望以不同方式链接它们。