使用共享库在 Linux 中编译 C 程序
Compile a C program in Linux using shared library
我正在尝试使用共享库在 Linux 中编译一个简单的 C 程序。
我在同一个文件夹中有以下文件:
mymain.c
#include "myclib.h"
int main() {
func();
return 0;
}
myclib.h
void func();
myclib.c
#include <stdio.h>
void func() {
printf("hello world!!!!!!!!!!!!\n");
}
然后我按照以下步骤操作:
gcc -c fPIC myclib.c
(创建独立于内存地址的对象文件)
产生:myclib.o
gcc -shared -fPIC -o libmyclib.so myclib.o
(创建共享库)
gcc -c mymain.c
(从 main.c 中创建目标文件)
到目前为止一切顺利 - 然后我准备好了以下文件:
- main.o
- libmyclib.so
所以我尝试用这种语法创建一个程序:
gcc -o program -lmyclib -L. mymain.o
(我想 libmyclib 的前缀 lib 应该用 l 替换?)
但是我从 gc-compiler 得到了错误信息:
*mymain.o: In function `main':
mymain.c:(.text+0xa): undefined reference to `func'
collect2: error: ld returned 1 exit status*
我也测试过这个语法:
gcc -o program 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
我正在尝试使用共享库在 Linux 中编译一个简单的 C 程序。
我在同一个文件夹中有以下文件:
mymain.c
#include "myclib.h"
int main() {
func();
return 0;
}
myclib.h
void func();
myclib.c
#include <stdio.h>
void func() {
printf("hello world!!!!!!!!!!!!\n");
}
然后我按照以下步骤操作:
gcc -c fPIC myclib.c
(创建独立于内存地址的对象文件)产生:myclib.o
gcc -shared -fPIC -o libmyclib.so myclib.o
(创建共享库)gcc -c mymain.c
(从 main.c 中创建目标文件)
到目前为止一切顺利 - 然后我准备好了以下文件:
- main.o
- libmyclib.so
所以我尝试用这种语法创建一个程序:
gcc -o program -lmyclib -L. mymain.o
(我想 libmyclib 的前缀 lib 应该用 l 替换?)
但是我从 gc-compiler 得到了错误信息:
*mymain.o: In function `main':
mymain.c:(.text+0xa): undefined reference to `func'
collect2: error: ld returned 1 exit status*
我也测试过这个语法:
gcc -o program 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