从静态库中删除main函数

时间:2015-03-20 14:50:42

标签: c++ windows

我的大部分代码都依赖于.lib格式的专有Windows库(静态库)。让我们称之为prop.lib。

该库的工作原理是我创建了一个链接到prop.lib的新共享库。 然后我可以通过prop.exe(另一个加载我的共享库并运行我的代码的程序)运行我的代码。

我想创建一个可以自己运行的可执行文件,但由于prop.lib包含一个main函数,我收到一个链接器错误。

是否有可能从lib中删除main函数或创建另一个入口点?

我使用Visual Studio 2005。

编辑:截至目前,我还没有prop.lib的源代码。

1 个答案:

答案 0 :(得分:2)

你应该意识到这是一个相当低级别的任务。

  1. 解决方法:如果您有可以构建可执行文件的配置,则可以在可执行版本中指定链接器选项/ ENTRY。

  2. Microsoft的editbin不允许执行此类修改。所以似乎没有官方方法来“破解”你的* .obj文件来自微软

  3. 尝试使用lib /list staticlib.lib查看静态库中的目标文件如果您很幸运,并且您将main.obj放在单独的目标文件中,那么只需 / remove 即可目标文件

  4. 如果3没有帮助尝试自己编写应用程序来编辑COFF文件中的符号。 https://msdn.microsoft.com/en-us/windows/hardware/gg463119.aspx

  5. 从目标文件的开头传递+ 8bytes,读取4个字节。它将以“具有名称的18字节结构。(如果所有名称都是8字节长)”的表偏移到表中。使用填充残差“name”字节用零编辑所需名称。我从不尝试与COFF合作。我在网上找不到像COFF编辑器这样的东西。