如何共享我的 C/C++ 项目并隐藏部分源代码?

2023-12-29

我想将我的用 C/C++(Linux 环境 gcc/g++ 编译器)编写的项目作为共享库/静态库共享,而不实际共享源代码。这样其他用户就可以在不真正了解我的源代码的情况下使用我的项目。谁能告诉我如何将其共享为 .so/.a 格式?

假设,我的项目如下所示:

main.cpp, 源1.cpp, 源2.cpp, 源3.cpp, head1.h, Makefile

如何通过隐藏文件的源代码来共享该项目源1.cpp, 源2.cpp and 源3.cpp并将它们制作为共享库/静态库。main.cpp文件包含 main() 函数。详细流程是怎样的?

PS:我是共享库/静态库的新手。


假设您有以下源文件:

mylib.c:

#include <stdio.h>

void my_print(int i)
{
    printf("i=%d\n", i);
}

其公共标头是:

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 分发给用户。然后可以在他们的代码中使用它,如下所示:

用户程序.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 包含公共接口和 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何共享我的 C/C++ 项目并隐藏部分源代码? 的相关文章

随机推荐

  • 使用“dplyr”保存残差

    我想使用 dplyr 对 data frame 进行分组 拟合线性回归并将残差保存为原始未分组 data frame 中的列 这是一个例子 gt iris gt select Sepal Length Sepal Width gt grou
  • jsf-带有输入参数的验证器

    这是我的 xhtml 页面的一部分
  • Pandas:如何对子类别内的前 N ​​个观察结果进行子集(和求和)?

    在这样的 pandas 数据框中 year month passengers 0 1949 January 112 1 1949 February 118 2 1949 March 132 3 1949 April 129 4 1949 M
  • 使用 sbt 构建命令行应用程序

    有人成功关注http www scala sbt org 0 13 docs Command Line Applications html http www scala sbt org 0 13 docs Command Line Appl
  • 带有 EventLogAppender 的 log4net 不记录

    使用以下配置不会发生任何情况 应用程序配置
  • 使用flask-uploads上传文件

    我正在尝试使用上传文件烧瓶上传 http pythonhosted org Flask Uploads 扩大 问题是 每次我似乎找到解决方案时 我都会资助另一个问题 而且我觉得文档很神秘 这是代码 from flask ext upload
  • Artillery:如何将 artillery html 报告图表发布到 Azure DevOps CI/CD 管道中?

    我正在处理一个要求 我必须使用 artillery 工具生成负载测试报告并将报告统计信息发布到我们的 Azure DevOps 管道中 Artillery 将报告生成为 html 格式 我想将其显示到 Azure DevOps 管道中 我该
  • 如何计算两个列表的所有交错?

    我想创建一个接受两个列表的函数 不保证列表的长度相等 并返回两个列表之间的所有交错 Input 两个列表的大小不必相等 Output 两个列表之间保留原始列表顺序的所有可能的交错 Example AllInter 1 2 3 4 gt 1
  • Angular2 种子项目中项目目录之外的文件

    我如何包含项目目录 Angular 2 之外的文件 我的文件夹结构是这样的 WebApp angular2 seed Shared business logic files Mobile App 我在网络应用程序项目的文件中给出了正确的文件
  • 为什么SmtpClient.SendAsync只能调用一次?

    我正在尝试使用 SmtpClient 在 NET 中编写通知服务 出于完全合法的非垃圾邮件目的 最初我只是循环遍历每条消息并发送它 但是这很慢 我想提高速度 因此 我改用 SendAsync 但现在在第二次调用时出现以下错误 An asyn
  • 计算 itertools.product() 的第 n 个结果

    我正在尝试计算 itertools product 的第 n 个结果 test list product 01 repeat 3 print test desired output test 0 print desired output 所
  • 如何使用 id 删除嵌套的 JSON 对象

    在我的应用程序中 我创建了一个基于 JSON 的 JavaScript 对象 类似于以下内容 name root id 112 children name child one id 231 children name grand child
  • Python 在不需要时更改文件权限

    知道为什么下面的 Python 脚本在运行后将文件夹权限更改为只读吗 它运行一次并删除文件夹中的所有文件 但当它再次运行时 会出现 Windows 错误 5 访问被拒绝 因为脚本将文件夹的权限更改为只读 我看不出它的作用或如何避免它 谢谢
  • 如何获得 Go 中的终端大小?

    如何在 Go 中获取终端大小 在 C 语言中 它看起来像这样 struct ttysize ts ioctl 0 TIOCGWINSZ ts 但是如何在 Go 中访问 TIOCGWINSZ cgo编译器目前无法处理c函数中的变量参数和c头文
  • PyTorch Cuda 与 anaconda 不可用

    我正在使用 anaconda 来调节我的环境 对于一个项目 我必须使用 GPU 进行网络训练 我在我的项目中使用 pytorch 并且正在尝试让 CUDA 工作 我安装了cudatoolkit numba cudnn 不过 当我尝试这个命令
  • 如何使用 write() 或 fwrite() 将数据写入终端(stdout)?

    我正在尝试加快我的 C 程序的速度 以便更快地输出数据 目前我正在使用printf 向外界提供一些数据 它是连续的数据流 因此我无法使用 return data 我该如何使用write or fwrite 将数据提供给console而不是文
  • Laravel Eloquent - 随时加密/解密数据

    我可以用Crypt加密 解密我的数据 我想加密数据库中的一些信息 例如姓名 电子邮件 电话号码等 假设我希望对所有内容进行加密 我希望能够在后台自行执行此操作 我可以通过覆盖create and save功能 For instance th
  • 如何使用 Ruby 下载图片?

    我想使用 Ruby 下载这张图片 我怎么做 http farm1 static flickr com 92 218926700 ecedc5fef7 o jpg 我使用的是 Mac 操作系统 require open uri open yo
  • 不想在绘图轴上使用科学记数法

    我经常在 R 中使用以下函数绘制各种散点图plot命令 有时两个 有时仅其中一个绘图轴都用科学记数法标记 我不明白 R 何时决定切换到科学记数法 令人惊讶的是 它经常打印出任何理智的人在标记绘图时都不会用科学计数法书写的数字 例如它将 5
  • 如何共享我的 C/C++ 项目并隐藏部分源代码?

    我想将我的用 C C Linux 环境 gcc g 编译器 编写的项目作为共享库 静态库共享 而不实际共享源代码 这样其他用户就可以在不真正了解我的源代码的情况下使用我的项目 谁能告诉我如何将其共享为 so a 格式 假设 我的项目如下所示