阅读了大量 gcc 文档和类似问题后,我的问题仍然存在。
我试图将 libluajit.a 静态链接到我的项目中,但无论我尝试哪种命令组合,都会弹出一个或另一个错误。不过,我已经通过动态链接成功编译了我的项目。
现在我没有想法,所以这就是我现在得到的:
gcc_options = -std=c++11 -static -pthread
src_dir = LuaHost
src_files = $(src_dir)/*.cpp
src_files += $(src_dir)/*.h
src_files += $(src_dir)/LuaSrc/*.h
src_files += $(src_dir)/LuaSrc/*.hpp
lib_cmd = -Wl,--no-as-needed -ldl -L./$(src_dir)/LuaSrc/ -lluajit
#compile everything and output an executeable
all:
g++ $(gcc_options) $(src_files) $(lib_cmd) -o LuaJITSandbox.o
以下是一些错误:
./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'
libluajit.a 已在同一台机器(RaspberryPi)上编译。
最佳答案
我认为-static
不是你所追求的。 -static
将建立一个static application
并且不意味着link this static library to the application
.
这里有几个选项。当您链接 -lluajit
您可以删除动态 .so
库的版本。 gcc 将默认使用动态链接,但当动态库不可用或未找到时,将回退到静态链接。
而不是 -lluajit
您可以直接指向静态库文件 - 将其视为对象输入文件:/usr/lib/libluajit.a
.
我认为推荐的方法是告诉链接器如何链接你的库。尝试使用-Wl,-Bstatic -lluajit
。您可以在Bstatic
之间切换和Bdynamic
就在库名称前面,以防您链接到多个库并希望以不同方式链接它们。
关于c++ - 与 gcc 静态链接时为 "Undefined reference to dlopen",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41516693/