如何在已有对应的.lib/.a文件而无源代码的情况下,如何恢复.dll/.so文件的符号信息?
……想问一下dalao们
您知道如何在已有对应的.lib/.a文件而无源代码的情况下,如何恢复.dll/.so文件的符号信息吗?[悬赏值350]
https://www.52pojie.cn/thread-1000053-1-1.html
尝试在吾爱发悬赏……目测多半要凉
大概是误会了悬赏区的用法吧……
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
问题的背景是这样的
我有一个炼丹用的python包mxnet,每次import mxnet as mx的时候都需要十几秒的时间
理论上……我是知道如何加速mxnet的加载的,比如mxnet加载缓慢的原因是libmxnet.dll里面包含了太多无用的CUDA_ARCH。只要github上拿下源代码,从源代码直接编译一份,保证import在一秒内结束
然而问题是,mxnet会升级,而我不可能每次升级都去mxnet那里下好源代码重新编译。
于是我去nvidia论坛提问,如何去掉.dll里面不需要的ARCH
他们给了一个解决方案,nvprune
然而nvprune是单文件版,不能同时输入两个文件,并且nvprune需要输入的文件是relocatable的——我能拿到的.dll都是被删掉了符号表导致不能relocate的版本,于是nvprune自然而然地失败了。
幸运地是,除了libmxnet.dll,下载的mxnet自带一个应当是包含了全部libmxnet.dll符号表内容的libmxnet.lib——然而问题是,我并不知道如何把这样的.dll跟.lib文件正确地结合起来,生成一个relocatable的.dll文件
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我真正关心的问题是,应该如何削减libmxnet.dll中无用的cuda_arch(对windows以及对linux,因为我不确定日后会不会专门弄个机子装linux来炼丹)
目前能找到的路径是,只要我们能把.lib文件的符号信息正确地送进.dll,我们就能使用nvprune修剪.dll文件,去掉所有无用的结构
最后这个应当是论坛里的大牛所熟悉的范畴,也是我悬赏的内容
(结果……悬赏区都是在求下载……真正的大神果然从来不逛悬赏区吗?) 想问一下
这个问题是
……
凉了吗? lib是静态链接库,它还没有链接,所以有符号信息?
没听说过nvprune啊,可以修改dll?
我感觉符号信息一般是编译的时候加上保留符号信息的选项才有的 beiwjk 发表于 2019-8-7 12:38
lib是静态链接库,它还没有链接,所以有符号信息?
没听说过nvprune啊,可以修改dll?
nvprune是nvidia的CUDA组件之一,如果不做高性能计算的话,用不到这玩意,没听过很正常
至于符号信息,.lib文件一定有符号信息(否则没办法链接,会出现类似“无法解析的外部符号”这样的错误)
对.dll文件,如果.dll文件带着符号,链接肯定没问题
但对那些没符号的.dll,使用编译器链接的时候应该会出问题,毕竟编译器没办法获取.dll文件的符号信息
大概就是这个原因才有了跟.dll配套的.lib文件——我们可以利用.lib的符号信息链接.dll文件
然而如何让nvprune认这样的.dll
我就不清楚了……
页:
[1]