g ++自定义动态库链接错误未定义符号

时间:2012-11-06 12:15:36

标签: c++ linux linker g++ shared-libraries

好的,我现在正在寻找解决方案2天。我没有找到任何解决我问题的方法。

目前正在进行什么? 因此,我尝试使用g ++在Linux Mint Maya 13上创建动态库(.so)。

foolib.h:

#pragma once
#include <stdio.h>

void foo(
    void
    );

foolib.cpp:

#include "foolib.h"

void foo(
    void
    )
{
   printf ("Hello World!\n");
};

main.cpp中:

#include "foolib.h"

int main(
    int    argc,
    char** argv
    )
{
    foo ();
};

我使用这些说明编译了这些文件:

libfoo.so:

g++ -shared -o libfoo.so -fpic foolib.cpp

FOO:

g++ main.cpp -o foo -L -lfoo

创建libfoo.so没有任何错误,但foo抛出未定义的引用'foo'。我从几个网页中复制了示例代码并尝试编译它,结果总是相同。

有趣的是,我可以链接到libdl.so(-ldl),加载我的.so和我的功能。我做错了什么?

我希望我能正确地提出我的问题。如果我没有,请告诉我。 :)

2 个答案:

答案 0 :(得分:3)

您应该使用:

g++ main.cpp -o foo -L./ -lfoo

g++ main.cpp -o foo libfoo.so

答案 1 :(得分:2)

你说你的foo编译/链接是g++ main.cpp -o foo -L -lfoo,这就是问题所在。 -L选项需要一个参数,该链接为链接器提供了一个额外的目录来搜索库,但是您还没有提供它。因此,在您的情况下,链接器认为-lfoo是要搜索的目录的名称,而不是要链接的库。

-L更改为-L.,它应该有效。

请参阅this documentation for more information