最近跨平台编译一个第三方库,想编译成能独立运行的绿色包(除了基础的C库),遇到一些常见问题,做了以下实验:
项目目录结构如下
├── bin
├── lib
│ ├── hello.c
│ └── world.c
└── main.c
world.c
#include<stdio.h>
void world(void)
{
printf("world.\n");
}
hello.c
#include <stdio.h>
void world(void);
void hello(void)
{
printf("hello\n");
world();
}
main.c
void hello(void);
int main(void)
{
hello();
}
编译world, hello dylib
gcc -c hello.c world.c
gcc world.o -dynamiclib -o libworld.dylib -install_name @rpath/../lib/libworld.dylib
gcc hello.o -dynamiclib -o libhello.dylib -L. -lworld -install_name @rpath/../lib/libhello.dylib
编译main
gcc main.c -o ./bin/test -lhello -lworld -L./lib -Wl,-rpath ./</

本文介绍在MacOS环境下如何通过gcc命令编译动态库,并使用@rpath实现绿色包的构建过程。文章详细记录了从源代码到最终可执行文件的每一步配置细节。
最低0.47元/天 解锁文章
306

被折叠的 条评论
为什么被折叠?



