the*_*dey 3 c c++ unix shared-libraries static-libraries
我想分享我用C/C++(Linux环境gcc/g ++编译器)编写的项目作为共享库/静态库而不实际共享源代码.这样其他用户就可以在不知道我的源代码的情况下使用我的项目.任何人都可以告诉我如何以.so/.a格式分享它?
假设,我的项目看起来像:
main.cpp, source1.cpp, source2.cpp, source3.cpp, head1.h, Makefile
如何通过隐藏文件source1.cpp,source2.cpp和source3.cpp的源代码并将它们作为共享库/静态库来共享此项目.main.cpp文件包含main()函数.告诉我详细的程序.
PS:我是共享库/静态库的新手.
假设您有以下源文件:
mylib.c:
#include <stdio.h>
void my_print(int i)
{
printf("i=%d\n", i);
}
Run Code Online (Sandbox Code Playgroud)
公共标题是:
mylib.h:
#ifndef MYLIB_H
#define MYLIB_H
void my_print(int i);
#endif
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样构建库:
gcc -g -Wall -Wextra -c mylib.c
gcc -g -Wall -Wextra -shared -fPIC -o libmylib.so mylib.o
Run Code Online (Sandbox Code Playgroud)
然后,您可以将libmylib.so和mylib.h分发给用户.然后可以在他们的代码中使用它,如下所示:
user_prog.c:
#include "mylib.h"
int main()
{
my_print(5);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后他们将libmylib.so放到像/ usr/lib或/ usr/local/lib这样的地方,并像这样编译:
gcc -g -Wall -Wextra -o user_prog user_prog.c -l mylib
Run Code Online (Sandbox Code Playgroud)
对于您的特定情况,假设head1.h包含公共接口和source1.cpp source2.cpp source3.cpp库,您将按如下方式编译:
g++ -g -Wall -Wextra -c source1.cpp
g++ -g -Wall -Wextra -c source2.cpp
g++ -g -Wall -Wextra -c source3.cpp
g++ -g -Wall -Wextra -shared -fPIC -o libmylib.so source1.o source2.o source3.o
Run Code Online (Sandbox Code Playgroud)