c++ - 从静态库中删除主函数

标签 c++ windows

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

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

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

是否可以通过某种方式从库中删除主函数或创建另一个入口点?

我使用 Visual Studio 2005。

编辑:到目前为止,我还没有 prop.lib 的源代码。

最佳答案

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

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

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

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

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

从目标文件开始传递 +8 个字节,读取 4 个字节。它将偏移到具有“带名称的 18 字节结构。(如果所有名称都是 8 字节长)”的表。用零填充剩余的“名称”字节来编辑所需的名称。我从不尝试使用 COFF。我在网上找不到类似 COFF 编辑器的东西。

关于c++ - 从静态库中删除主函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29169403/

相关文章:

c++ - 没有 X 的 Raspberry Pi 上的 SDL2?

c++ - 使用 GCC 洗牌巨大位 vector 的最有效方法是什么

java - 使用 JNI : Is this an issue with my code, 从 Java 调用 native (C++) 函数时发生访问冲突或已知问题?

java - 如何更改正在运行的java进程的优先级?

c++ - COM 的 CoUnintailize() api 崩溃

windows - Qt:如何为主窗口小部件制作阴影?

c++ - OpenGL DevIL c++ 源代码

c++ - 在 Windows 上运行紧贴

python - CUDA 问题 - 如何在 Win 10 中清理安装 CUDA 以解决 cudaGetDevice() 失败

c++ - 在 Linux 中读取 txt 中的参数