我正在尝试让一个库在我的c ++项目中工作,对于那些不习惯c ++的人来说,没有明确的指示如何做到这一点
以下link是我最接近的
它陈述以下
-L/path/to/my/library/folder -ldllname
以下thread还说明了以下内容
gcc yourfile.cpp -lblah
现在我可以看到命令是-l
+ filename
,例如我的文件名是directory/libtest.so
它是-ldirectory/libtest.so
,这是正确的,有人可以澄清
我目前正在使用以下命令编译我的maincpp.cpp
文件,但是想要包含一个名为./directory/libtest.so
g++ -fPIC -o libgetmacip.so -shared -I $JAVA_HOME/include -I $JAVA_HOME/include/linux maincpp.cpp cpptoinclude.cpp
答案 0 :(得分:18)
现在我可以看到该命令是
-l + filename
,例如我的文件名为directory/libtest.so
,它将是-ldirectory/libtest.so
不,那不正确。它应该是-Ldirectory -ltest
,即您使用-L
将目录添加到链接器将查找库的搜索路径,并说明要链接到-l
的库,但要链接在没有libtest.so
前缀或文件扩展名的情况下,您libtest.a
或-ltest
lib
。
可以通过明确命名文件进行链接,不需要-L
或-l
选项,即只有directory/libtest.so
,但对于动态库几乎总是如此这是错误的事情,因为它将确切的路径嵌入到可执行文件中,因此当程序运行时,同一个库必须位于同一个位置。您通常希望通过名称(而不是路径)链接到它,以便可以在运行时从任何位置使用具有该名称的库。
答案 1 :(得分:0)
这是有关如何创建.so和.cpp文件并将其链接的分步过程
创建要转换为.so的.cpp文件。
例子-
#include<stdio.h>
int add(int a , int b)
{ return a+b;}
通过名称add.cpp保存它
使用以下命令创建.so
gcc -c -fPIC add.cpp -o add.o
这将创建libadd.so
创建一个将使用此.so文件的.cpp文件
示例-
#include<stdio.h>
extern int add(int a, int b);
int main(int argc, char** argv)
{
printf("Hello the output is %d \n",add(10,15));
return 0;
}
将其另存为main_file.cpp
使用此命令从该文件创建.o文件
g++ -c main_file.cpp
使用此命令将.so与.o链接
g++ -o prog main_file.o -L. -ladd
此处L指定带有.so文件的文件夹
-l指定.so库的名称
使用命令运行程序
./prog