如何共享我的 C/C++ 项目并隐藏部分源代码?
How do I share my C/C++ project and hide some of the source code?
我想分享我在 C/C++(Linux 环境 gcc/g++ 编译器)中编写的项目作为共享 library/static 库而不实际共享源代码。这样其他用户就可以在不知道我的源代码的情况下使用我的项目。谁能告诉我如何以 .so/.a 格式共享它?
假设我的项目如下所示:
main.cpp,
source1.cpp,
source2.cpp,
source3.cpp,
head1.h,
生成文件
如何通过隐藏文件 source1.cpp、source2.cpp 的源代码来共享此项目和 source3.cpp 并将它们作为共享 library/static 库。 main.cpp 文件包含 main() 函数。告诉我详细的过程。
PS: 我是共享library/static库的新手
当然可以。只需向人们提供库文件和与用于构建库的源文件相对应的头文件。
假设您有以下源文件:
mylib.c:
#include <stdio.h>
void my_print(int i)
{
printf("i=%d\n", i);
}
public header 为:
mylib.h:
#ifndef MYLIB_H
#define MYLIB_H
void my_print(int i);
#endif
然后您可以像这样构建库:
gcc -g -Wall -Wextra -c mylib.c
gcc -g -Wall -Wextra -shared -fPIC -o libmylib.so mylib.o
然后您可以将 libmylib.so 和 mylib.h 分发给用户。然后可以像这样在他们的代码中使用它:
user_prog.c:
#include "mylib.h"
int main()
{
my_print(5);
return 0;
}
然后他们会将 libmylib.so 放入 /usr/lib 或 /usr/local/lib 之类的地方,然后像这样编译:
gcc -g -Wall -Wextra -o user_prog user_prog.c -l mylib
对于您的特定情况,假设 head1.h 包含 public 接口和 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
您需要从源文件创建目标文件。然后创建静态 and/or 共享库。您将需要提供一个头文件以供您的库使用。并注意你的库不能包含 main()。
我想分享我在 C/C++(Linux 环境 gcc/g++ 编译器)中编写的项目作为共享 library/static 库而不实际共享源代码。这样其他用户就可以在不知道我的源代码的情况下使用我的项目。谁能告诉我如何以 .so/.a 格式共享它?
假设我的项目如下所示:
main.cpp, source1.cpp, source2.cpp, source3.cpp, head1.h, 生成文件
如何通过隐藏文件 source1.cpp、source2.cpp 的源代码来共享此项目和 source3.cpp 并将它们作为共享 library/static 库。 main.cpp 文件包含 main() 函数。告诉我详细的过程。
PS: 我是共享library/static库的新手
当然可以。只需向人们提供库文件和与用于构建库的源文件相对应的头文件。
假设您有以下源文件:
mylib.c:
#include <stdio.h>
void my_print(int i)
{
printf("i=%d\n", i);
}
public header 为:
mylib.h:
#ifndef MYLIB_H
#define MYLIB_H
void my_print(int i);
#endif
然后您可以像这样构建库:
gcc -g -Wall -Wextra -c mylib.c
gcc -g -Wall -Wextra -shared -fPIC -o libmylib.so mylib.o
然后您可以将 libmylib.so 和 mylib.h 分发给用户。然后可以像这样在他们的代码中使用它:
user_prog.c:
#include "mylib.h"
int main()
{
my_print(5);
return 0;
}
然后他们会将 libmylib.so 放入 /usr/lib 或 /usr/local/lib 之类的地方,然后像这样编译:
gcc -g -Wall -Wextra -o user_prog user_prog.c -l mylib
对于您的特定情况,假设 head1.h 包含 public 接口和 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
您需要从源文件创建目标文件。然后创建静态 and/or 共享库。您将需要提供一个头文件以供您的库使用。并注意你的库不能包含 main()。