如何共享我的 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++ 项目并隐藏部分源代码? 的相关文章

  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • System.IO.FileNotFoundException:找不到网络路径。在 Windows 7 上使用 DirectoryEntry 对象时出现异常

    我正在尝试使用 DirectoryEntry 对象连接到远程 Windows 7 计算机 这是我的代码 DirectoryEntry obDirEntry new DirectoryEntry WinNT hostName hostName
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐

  • 使用“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 格式 假设 我的项目如下所示