1

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

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

傻瓜.h:

#pragma once
#include <stdio.h>

void foo(
    void
    );

傻瓜.cpp:

#include "foolib.h"

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

主.cpp:

#include "foolib.h"

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

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

libfoo.so:

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

富:

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

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

有趣的是,我可以链接做 libdl.so (-ldl),加载我的 .so 和我的函数。我究竟做错了什么?

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

4

2 回答 2

4

你应该使用:

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

或者

g++ main.cpp -o foo libfoo.so
于 2012-11-06T12:25:41.653 回答
2

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

更改-L-L.它应该可以工作。

有关详细信息,请参阅此文档

于 2012-11-06T12:26:32.923 回答