我在QML中编写了几个应用程序(Qt 5的一部分).在我之前提出的一个问题(https://softwareengineering.stackexchange.com/questions/213698/deploying-qt-based-app-on-mac-os-x)中,我找到了部署我的应用程序的解决方案OS X(使用macdeployqt工具).
在Windows上部署Qt4应用程序很简单:
不幸的是,这种方法在Qt5中不起作用(我甚至包括带有qwindows.dll文件的平台文件夹,但它不起作用).经过几天的尝试,我放弃并编译了Qt5的静态版本.
再一次,它没有用.该应用程序可在安装了Qt的PC上运行,但它在"干净"的PC上崩溃.作为旁注,Windows 8/8.1系统不会发出警告或消息,通知我有关应用程序崩溃的信息.但在Windows 7中,一条消息通知我该应用程序崩溃了.
我已经尝试运行Dependency Walker(depends.exe),我的应用程序的静态构建中的所有库似乎都很好.
在Windows 8中,我没有收到任何错误.但在使用depends.exe分析应用程序后,我收到了源自QtGui.dll的访问冲突.确切的错误是
在地址0x61C2C000的"QT5GUI.DLL"中发生第二次机会异常0xC0000005(访问冲突).
是否有我遗漏的东西(比如额外的DLL或配置文件)?
应用信息:
我开发了一个带有Qt5的Mac应用,所以在Xcode之外.我希望GateKeeper允许我的应用程序在客户端的计算机上运行,而不是发出"无法打开,因为无法确认开发人员的身份"警告.
我已成功对该应用程序进行了数字签名,但GateKeeper仍然附带此投诉.我有一个Apple开发人员证书(我是团队代理),我的钥匙串说它是有效的.我还安装了两个Apple根证书.
我使用命令行实用程序codesign对app文件夹中的所有二进制文件进行数字签名,此外我还对app文件夹本身进行了数字签名.在所有情况下,协同设计的响应都是信息性的,并且没有显示错误.使用codesign我可以检查确实所有二进制文件都已签名,正在运行
$ codesign --verify --deep --verbose=2 MyApp.app
Run Code Online (Sandbox Code Playgroud)
显示所有二进制文件都已验证.此外,它报告:
MyApp.app:在磁盘上有效
MyApp.app:满足其指定要求
运行:
$ codesign -v --verbose=4 --display MyApp.app
Run Code Online (Sandbox Code Playgroud)
给
Executable =/Users/xxx/trunk/yyy/deploy/release/MyApp.app/Contents/MacOS/MyApp
Identifier = aaaa.MyApp
Format = bundle with Mach-O thin(x86_64)
CodeDirectory v = 20200 size = 12461 flags = 0x0 (无)散列= 616 + 3位置=嵌入
散列类型= sha1大小= 20
CDHash = d1c12c783dac0e8d9a2b749fb896b11558cec8b6
签名大小= 8532
授权=开发者ID应用程序:XXXXX
授权=开发者ID证书颁发机构
授权= Apple根CA
时间戳= 29 jul.2015 12; 04:40
Info.plist entries = 8
TeamIdentifier = YYYYY
Sealed Resources version = 2 …
我想在Linux上运行基于Qt 5的应用程序usind动态库.总之,脚本会将可执行文件和其他相关文件(包括lib文件夹中所有必需的.so)复制到所需目标,并且脚本调用gksudo将作为应用程序的调用者.
直到我调用可执行脚本直到现在一切正常:应用程序无法运行.当我要求运行时sudo,它告诉我库(Qt5SerialPort ...)丢失了.运行ldd实际的可执行文件我发现应用程序正在从lib文件夹中获取所需的库,但是一些明显的硬编码路径.
我尝试通过使用解决这个问题,qt.conf但没有成功.在这里注意,似乎qt.conf实际上并不应该以这种方式工作.咨询Qt文档,我决定用LD_LIBRARY_PATH链接器告诉链接器在哪里找到libs,因为我已经使用脚本来运行应用程序了.所以最终的,总结的脚本代码是
#!/bin/sh
LD_LIBRARY_PATH=lib/
export LD_LIBRARY_PATH
sudo ldconfig #sometimes sudo /sbin/ldconfig -v
gksudo "$INSPATH/myApp" #or sudo instead
Run Code Online (Sandbox Code Playgroud)
问题是它仍然无法正常工作.当我打电话时echo $LD_LIBRARY_PATH,我可以看到变量被正确编辑,但当我调用运行行(使用sudo)时,它一直告诉我没有找到lib.
我错过了什么?
qt ×2
c++ ×1
cocoa ×1
code-signing ×1
deployment ×1
linux ×1
macos ×1
qt5 ×1
windows ×1
xcode ×1