1

我正在使用 InstallJammer 为我的应用程序(Windows、Linux 和 Mac)构建跨平台安装程序。但是,InstallJammer 开发已经停止,官方论坛现已关闭。

我需要为 Windows 构建 installkit,因为我必须对 Windows 安装清单进行一些更改,以添加 Windows 7 支持(否则安装程序会显示消息“此程序可能未正确安装”)。

我从这里获取了最新的 installkit 资源:http: //sourceforge.net/projects/installjammer/files/installkit/1.2.15/installkit-1.2.15.tar.gz/download

我发现这个主题http://www.installjammer.com/forums/viewtopic.php?f=3&p=9258帮助我入门。

我获取了最新版本的 MinGW 并输入了 ./configure && make。它启动了构建过程,但是在尝试编译 TCL 时出现了这个错误:

c:/installkit-1.2.15/src/tcl/win/tclWinReg.c:750:29: error: lvalue required as increment operand

由于这些来源有点旧,我想我应该尝试使用旧的 GCC 版本(我使用的是 4.7.2)。于是我将MinGW的GCC降级到3.4.5版,又试了一次。

这一次,TCL建好了。一切进展顺利,直到它未能构建一个名为“miniarc”的东西(我不知道它是什么),并出现以下错误消息:

miniarc.o:miniarc.c:(.text+0x370c): undefined reference to `_imp__strtoull'
miniarc.o:miniarc.c:(.text+0x37c9): undefined reference to `_imp__strtoull'
miniarc.o:miniarc.c:(.text+0x3cb6): undefined reference to `_imp__strtoull'
miniarc.o:miniarc.c:(.text+0x3e78): undefined reference to `_imp__strtoull'
miniarc.o:miniarc.c:(.text+0x3e9f): undefined reference to `_imp__strtoull'
miniarc.o:miniarc.c:(.text+0x3ff5): more undefined references to `_imp__strtoull' follow
collect2: ld returned 1 exit status

奇怪的是在 miniarc.c 中没有提到imp _strtoull。

继续前进,我尝试在 Ubuntu 中构建它,因为我不知道还能做什么,而且它成功了!GCC 版本是 4.4.3。所以我去为 MinGW 搜索 GCC 4.4.3,但最接近的版本是 4.4.0。我抓住这些并再次尝试。相同的 tcl 构建错误(关于 tclWinReg.c)。

然后我回到 GCC 4.7.2 并用最新的 (8.5) 替换 TCL & TK 源 (8.4) 并再次尝试。

TCL 和 TK 都构建得很好,其他一些库也是如此,但是当涉及到“miniarc”时,它又失败了。这次出现了不同的错误:

undefined reference to `TclIncrVar2'

显然,该功能在 TCL 8.5 中不再存在。

所以,我没有想法。我什至尝试给最初的(也是唯一的)InstallJammer 开发人员发送电子邮件,但仍然没有得到答复(我什至不知道他的电子邮件是否相同)。

有没有人有什么建议?

编辑:我应该补充一点,我对 Makefiles 的经验很少,我最后一次用 C 编码是 8 年前的大学。所以,如果我没有注意到这一切有什么明显的地方,我深表歉意。

4

1 回答 1

0

我不喜欢这个解决方案,但这是我如何让它工作的:

  1. 使用 GCC 3.4.5,我通过键入 ./configure && make; 开始了制作过程。
  2. make 过程在到达 'miniarc' 时停止并出现错误(如上所述);
  3. 然后,我手动从文件 strtoull.o 构建了一个 DLL (strtoull.dll)(下面是我输入的确切命令行);

    gcc -pipe -shared -o strtoull.dll strtoull.o -lz -L/c/installkit-1.2.15/Windows/lib /c/installkit-1.2.15/Windows/lib/libtclstub84s.a"
    
  4. 之后,我将 strtoull.dll 复制到 miniarc/build 和 windows/system32;

  5. 然后我进入文件夹 miniarc/build 并输入:

    gcc -pipe -shared -o miniarc01.dll miniarc.o sha1.o md5.o -lz -L/c/installkit-1.2.15/Windows/lib  "/c/installkit-1.2.15/Windows/lib/libtclstub84s.a" strtoull.dll
    
  6. 最后,我再次输入 make 以便它可以继续构建其余的东西。

于 2012-12-06T13:50:09.397 回答