好的,我现在正在寻找解决方案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和我的功能。我做错了什么?
我希望我能正确地提出我的问题。如果我没有,请告诉我。 :)
答案 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.
,它应该有效。