回 帖 发 新 帖 刷新版面

主题:[讨论]Code::Blocks 8.02怎样生成动态链接库?

本人是个菜鸟,刚刚开始学Linux编程,想试着生成调用一个动态链接库,从网上Copy了下面这段代码试试,结果出现图中的错误,请问在Code::blocks 8.02中如何设置,才能使用共享库。

#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int main(int argc, char **argv) {
    void *handle;
    double (*cosine)(double);
    char *error;
    handle = dlopen ("libm.so", RTLD_LAZY);
    if (!handle) {
        fprintf (stderr, "%s\n", dlerror());
        exit(1);
    }
    dlerror();    /* Clear any existing error */
    cosine = dlsym(handle, "cos");
    if ((error = dlerror()) != NULL)  {
        fprintf (stderr, "%s\n", error);
        exit(1);
    }
    printf ("%f\n", (*cosine)(2.0));
    dlclose(handle);
    return 0;
}

错误都是: Undefined reference to ‘dlXXX’
dlXXX包括dlopen,dlerror,dlsym,dlclose等。

回复列表 (共2个回复)

沙发

handle = dlopen ("libm.so", RTLD_LAZY);

你得告诉dlopen到哪里去找libm.so这个文件啊!--电脑是很傻、很执着的。

板凳


首先表示感谢啊,不过怎么告诉CodeBlocks呢?
我在菜单Project-》Build options-》linker setting-》Link libraries中添加了
../../../../../usr/lib/libm.so(我觉得我应该添加成/usr/lib/libm.so,不知道为什么会变成这样,不过我是用鼠标选的),在Project-》Build options-》linker setting-》Search directories中也添加../../../../../usr/lib。
但是还是不行。

请问具体应该怎样告诉dlopen去哪找libm.so这个文件?

我来回复

您尚未登录,请登录后再回复。点此登录或注册