Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用共享库在Linux中编译C程序_C_Linux_Gcc_Shared Libraries - Fatal编程技术网

使用共享库在Linux中编译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

我试图在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");

} 
我还测试了这种语法:

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中还是什么?