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.