【发布时间】:2014-09-04 16:43:52
【问题描述】:
我正在尝试使用 Windows 上的 cbp2make 工具从代码块项目文件“.cbp”生成生成文件。但是生成的 makefile 有 unix 格式的归档库:
LIB = libkernerl32.a libuser32.a libgdi32.a
,在尝试使用mingw32-make.exe时导致问题,它抱怨libkernerl32.a丢失
当我通过代码块编译时,我在构建日志中看到它使用 -lkernerl32 luser32 -lgdi32。
我在文本编辑器中查看了 project.cbp,发现下面有: 等等……
所以我假设代码块在构建时将那些从 libkernel32.a 更改为 -lkernel32,而 cbp2make 在生成 makefile 时似乎没有这样做。
我运行:cbp2make.exe -in project.cbp -out makefile -windows
我怎样才能让 cbp2make 拥有: LIB = -lkernel32 -luser32 代替 LIB = libkernel32.a libuser32.a ?
【问题讨论】:
-
您实际上遇到了什么问题?如果将
LIB行用作要构建/打包/等的库文件列表,则它是完全合理的。 (假设它们在 Windows 上确实存在,并带有这些名称)。链接器的-l的参数是库基名(即没有lib前缀和文件扩展名)。所以-lkernel32可以使用libkernel32.so或libkernel32.a中的任何一个(我不确定在Windows 上可能是libkernel32.dll)。 -
问题是“.a”在 Windows 上不存在,如果我没记错的话,它们通常是“.lib”,所以当我“制作”时它失败了,因为“libkernel32.a “在windows机器上根本不存在,它应该,充其量是在寻找一个“.lib”。我希望 cb2make 工具使用 -lkernel32 而不是 libkernel32.a 生成 makefile
-
我的意思是,该行可能没有(尽管可能)为链接器指定
-l参数。您可以在链接器中使用裸文件名,但很多时候您不这样做。我并不是说这条线对于 Windows 来说没有错,它很可能是,我只是不确定这是你遇到的实际问题(因为你实际上并没有告诉我们那个问题是什么)。跨度> -
抱歉,不,问题不在于指定文件名。我猜它可能是“kernel32.lib”,它编译没有问题。但是由于我希望makefile在windows而不是linux上工作,cbp2make不应该生成带有“.a”库扩展名的makefile,而是“.lib”。这是生成文件的问题。
-
你没有抓住重点。您一直告诉我们您想要那个,但您没有告诉我们具有“错误”名称的文件实际上对您不利。您暗示它正在破坏事物,但没有给我们错误消息或任何东西。这就是我一直试图找出的......当您尝试使用它们进行构建时(使用其中包含
.a的 makefile)会损坏什么?
标签: windows makefile codeblocks mingw32