9
回答
C/C++能否做到无源码打包所有依赖的dll/so到目标release文件
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
变成一个目标文件可以方便发布以及类似跨语言依赖的便捷,搜了下下下下stackoverflow,没发现有好的解决方案,不知道是否想法就是行不通, @中山野鬼 @宏哥 蹦达出来,哥今晚有需求 
举报
少帮主
发帖于5年前 9回/1K+阅
共有9个答案 最后回答: 5年前
估计你的打包不是重连接成一个release文件吧。这方面我也不熟悉哦。一般只烦开发。后面的事情不关心。你找找一些软件发布打包器之类的软件或工具看看。
--- 共有 4 条评论 ---
中山野鬼@少帮主 我也没这么玩过。哈。谁玩过也可以招呼一声我学习一下。 5年前 回复
少帮主回复 @中山野鬼 : 先谢谢了,我这个不称职的C码奴,不太懂makefile,我还以为makefile能V5到把so全搞进去biaji一坨出来呢,哈哈哈 5年前 回复
中山野鬼回复 @少帮主 : 这个我一时想不起来有没有哦。回头我看看资料。如果有给你摘一段。没有就没办法了。。。哈。 5年前 回复
少帮主哇,野鬼兄,你真是无处不在啊,谢谢谢啦,这么快的回复。 我不是要工具打包,就是想变成一个文件,比如多个so变成一个,方便部署 5年前 回复

对于这个问题, 我没有经验.

但是对于一个相似的问题, 我可以给出答案:

我利用 cx_freeze 做嵌入式python应用的时候, 可以将 非python的库,成功打包发布. python自身可以反射依赖.

对于C, 如果在win, 我建议你把接口发布成com服务. 就跨语言了,当然前提是你整个软件包对外提供的接口非常简洁. 

如果你不嫌大, 在win,用嵌入式python和容易实现com接口服务,并进行包管理. 如果嫌大, lua可以嵌入很多语言, 那么和lua一起打包. python的另外一个好处,你很方便将其打包成http服务.

另外一个实践是,我自己有个软件包, 需要进行密集内存操作, 我就用libevent打包成简单的http服务, 呼叫方, python,php都有.

软件就是服务啦, 打包成服务就得了.

上面几样, 看看是不是符合你的需求.

引用来自“宏哥”的答案

对于这个问题, 我没有经验.

但是对于一个相似的问题, 我可以给出答案:

我利用 cx_freeze 做嵌入式python应用的时候, 可以将 非python的库,成功打包发布. python自身可以反射依赖.

对于C, 如果在win, 我建议你把接口发布成com服务. 就跨语言了,当然前提是你整个软件包对外提供的接口非常简洁. 

如果你不嫌大, 在win,用嵌入式python和容易实现com接口服务,并进行包管理. 如果嫌大, lua可以嵌入很多语言, 那么和lua一起打包. python的另外一个好处,你很方便将其打包成http服务.

另外一个实践是,我自己有个软件包, 需要进行密集内存操作, 我就用libevent打包成简单的http服务, 呼叫方, python,php都有.

软件就是服务啦, 打包成服务就得了.

上面几样, 看看是不是符合你的需求.

 也许是我没说清楚,我不是为了跨语言的问题,是中间开发c的动态库,但是同时依赖到了其他动态库,但是我想第三方使用我自己发布的动态库只需要我这个动态库

比如: 目标 A.so  使用到 B.so + C.so 我想发布 为 A+.so ,别人使用的时候只需要我这个A+.so不需要B.so 与C.so

引用来自“少帮主”的答案

引用来自“宏哥”的答案

对于这个问题, 我没有经验.

但是对于一个相似的问题, 我可以给出答案:

我利用 cx_freeze 做嵌入式python应用的时候, 可以将 非python的库,成功打包发布. python自身可以反射依赖.

对于C, 如果在win, 我建议你把接口发布成com服务. 就跨语言了,当然前提是你整个软件包对外提供的接口非常简洁. 

如果你不嫌大, 在win,用嵌入式python和容易实现com接口服务,并进行包管理. 如果嫌大, lua可以嵌入很多语言, 那么和lua一起打包. python的另外一个好处,你很方便将其打包成http服务.

另外一个实践是,我自己有个软件包, 需要进行密集内存操作, 我就用libevent打包成简单的http服务, 呼叫方, python,php都有.

软件就是服务啦, 打包成服务就得了.

上面几样, 看看是不是符合你的需求.

 也许是我没说清楚,我不是为了跨语言的问题,是中间开发c的动态库,但是同时依赖到了其他动态库,但是我想第三方使用我自己发布的动态库只需要我这个动态库

比如: 目标 A.so  使用到 B.so + C.so 我想发布 为 A+.so ,别人使用的时候只需要我这个A+.so不需要B.so 与C.so

这个当然可以.

但是有前提, 你必须拥有B.so + C.so 对应的 静态库.a文件,或者源代码, 非动态库对应的 .a 文件. 

然后静态联编 生成动态 A.so 和A.a, 就不需要B.so 和C.so.

静态库.a 相当于简单的 .o 文件打包.

--- 共有 1 条评论 ---
少帮主谢谢,我试试:) 5年前 回复
一个例子,mongodb windows下最后的发布版本就是一个exe,难道使用C++一点儿库都没依赖到吗? 还有很多其他精致的linux开源产品,最后都一个可执行文件,亲啊,应该行吧(不是win下的发布工具哦)
--- 共有 1 条评论 ---
Lunar_Lin拿源代码直接静态编译 不就这效果了. 5年前 回复

依赖动态链接库的代码没办法把库内容编译成静态可执行文件.

需要库源码,然后把库文件编译成静态库,链接的时候 指定静态链接.

--- 共有 1 条评论 ---
少帮主好,我试试看,谢了 5年前 回复
搜下PE Loader ,自己做PE Loader模拟window加载dll是可以,不过不是全部DLL都行,好像如果DLL用了MFC就不行,你试下吧,兄弟你是不是用了别人的东西,又不想别人看到你用了,哈哈,我也干过这事情,不过没成功

http://blog.csdn.net/longlong821/article/details/7188133

似乎这个ILmerge可以,不过Linux下的so就不知道用什么工具了,好像还有一个DLLmerge

顶部