Linux的c + +错误:未定义引用'dlopen'
我使用C ++(Eclipse)在Linux下工作,并希望使用库。 Eclipse给我一个错误:
undefined reference to 'dlopen'
你知道一个解决scheme吗?
这是我的代码:
#include <stdlib.h> #include <stdio.h> #include <dlfcn.h> int main(int argc, char **argv) { void *handle; double (*desk)(char*); char *error; handle = dlopen ("/lib/CEDD_LIB.so.6", RTLD_LAZY); if (!handle) { fputs (dlerror(), stderr); exit(1); } desk= dlsym(handle, "Apply"); if ((error = dlerror()) != NULL) { fputs(error, stderr); exit(1); } dlclose(handle); }
你必须链接到libdl,添加
-ldl
到您的链接器选项
@Masci是正确的,但如果你使用C(和gcc
编译器)考虑到这是行不通的:
gcc -ldl dlopentest.c
但是这样做:
gcc dlopentest.c -ldl
花了我一点弄清楚…
这个话题是相当古老的,但我今天在编译cegui 0.7.1(openVibe先决条件)时也遇到了同样的问题。
对我来说有效的是在Makefile中设置: LDFLAGS="-Wl,--no-as-needed"
。
我也试过了LDFLAGS
但无济于事。
你需要为makefile做这样的事情:
LDFLAGS =' – ldl'make install
这将通过链接器标记从链接器。 生成文件是否自动生成并不重要。
你可以尝试添加这个
LIBS=-ldl CFLAGS=-fno-strict-aliasing
到configuration选项
即使使用-ldl
也遇到同样的问题。
除了这个选项,源文件需要放在库之前,参见`dlopen'的未定义的引用 。
为了使用dl函数,您需要为链接器使用-ldl标志。
你如何在eclipse中做到这一点?
按下Project – > Properties – > C / C ++ build – > Settings – > GCC C ++ Linker – >
在“库(-l)”框中按“+”号 – >写“ dl ”(不带引号) – >按下确定 – > 清理并重build项目。
$gcc -o program program.c -l <library_to_resolve_program.c's_unresolved_symbols>
为什么放置-l dl很重要的一个很好的描述
但在文档From $ man gcc中也有一个非常简洁的解释
-llibrary -l library Search the library named library when linking. (The second alternative with the library as a separate argument is only for POSIX compliance and is not recommended.)
It makes a difference where in the command you write this option; the linker searches and processes libraries and object files in the order they are specified. Thus, foo.o -lz bar.o searches library z after file foo.o but before bar.o. If bar.o refers to functions in z, those functions may not be loaded.