使用共享库在Linux中编译C程序
我试图在Linux中用一个共享库编译一个简单的C程序 我在同一文件夹中有以下文件: mymain.c使用共享库在Linux中编译C程序,c,linux,gcc,shared-libraries,C,Linux,Gcc,Shared Libraries,我试图在Linux中用一个共享库编译一个简单的C程序 我在同一文件夹中有以下文件: mymain.c #include "myclib.h" int main() { func(); return 0; } #include <stdio.h> void func() { printf("hello world!!!!!!!!!!!!\n"); } myclib.h void func(); myclib.c
#include "myclib.h"
int main() {
func();
return 0;
}
#include <stdio.h>
void func() {
printf("hello world!!!!!!!!!!!!\n");
}
myclib.h
void func();
myclib.c
#include "myclib.h"
int main() {
func();
return 0;
}
#include <stdio.h>
void func() {
printf("hello world!!!!!!!!!!!!\n");
}
我还测试了这种语法:
gcc-o程序mymain.c-L-lmyclib-Wl,-rpath,。
然后我得到以下错误:
/usr/bin/ld: cannot find -lmyclib.so
collect2: error: ld returned 1 exit status
在这两个实现中我做错了什么?
如何使用共享库将此程序编译为可执行文件?您需要在链接器调用命令行末尾放置
-l
选项:
gcc -o program -L. mymain.o -lmyclib
将
gcc-o program-lmyclib-L.mymain.o
更改为gcc-o program-mymain.o-lmyclib-L.
@PaulR-k
选项需要排在最后。@fuzzxl:我不这么认为(假设你的意思是-L
?)-请参阅:@PaulR我的意思是-L
;很抱歉,这是一个输入错误。@fuzzxl:的确-主要的一点是-L
和-L
选项的顺序无关紧要-请参阅我链接的答案。唯一重要的是目标文件和库的顺序。谢谢它的工作!!!但现在,当我使用./program执行程序时,我收到错误消息:加载共享库时出错:libmyclib.so:无法打开共享对象文件:没有这样的文件或目录。但是我会在几分钟内接受这个答案:-)您不需要更改LD_PRELOAD来加载位于预定义目录之外的共享对象吗?是的-我猜它看起来在usr/lib中还是什么?