QT软件从linux下移植到windows下,使用libxml2,libcurl求助

siasjack 2013-09-09 03:59:19
如题,以前从没做过win下的软件开发,我现在的这个项目需要用到libxml2和libcurl,这些库的zip包已经下载到了

但是在win下使用是不是必须修改源码啊?修改好后拿到linux下是不是又要改了,有没有一个通用的宏代表win和linux,在一些代码里经常见到#ifdef WIN32 在这是不是也要这么用

求指导
...全文
469 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhxianbin 2013-09-16
  • 打赏
  • 举报
回复
这个问题不明白,检查一下 qtcreator 配置、.pro 的设置,重新编译等等
siasjack 2013-09-13
  • 打赏
  • 举报
回复
引用 13 楼 zhxianbin 的回复:
[quote=引用 12 楼 jk110333 的回复:] [quote=引用 11 楼 zhxianbin 的回复:] INCLUDEPATH += //头文件路径 LIBS += -L ..\BS_win32\libs -l xml2.lib
哈哈 这个成功了 上面的xmlfree的问题也解决了! 现在的问题是建个文件夹路径的问题 让程序运行在linux时创建文件为/tmp/image,在windows运行时创建为D://image文件夹 QT中有没有全局识别windows还是linux的宏? 就像__WIN32 __LINUX__这样的?[/quote]4 楼不是吗?[/quote] 哥们 我又来了 现在所有的问题都完美解决了!不用修改源码就可以直接在windows下编译后运行 现在该制作安装包了,我的软件不是静态编译的,那么在一个没有qt相关dll库的电脑上是不能运行的,会提示少XXX.dll文件!然后我把相关的dll文件拷贝过去就可以,但是我发现在qt安装目录下好多dll文件是不需要的,但是我不能分辨出来哪些是需要的哪些是不需要的,哥们 给点指点!
siasjack 2013-09-13
  • 打赏
  • 举报
回复
引用 17 楼 zhxianbin 的回复:
http://blog.csdn.net/yimiyangguang1314/article/details/7516834

多谢哥们

多谢多谢!!
在做windows下的安装包了!
基本上问题都解决掉了!
又遇见个奇葩的问题,不管用qtcreator打开什么功能都会出现下面的构建错误
zhxianbin 2013-09-13
  • 打赏
  • 举报
回复
引用 15 楼 jk110333 的回复:
[quote=引用 13 楼 zhxianbin 的回复:] [quote=引用 12 楼 jk110333 的回复:] [quote=引用 11 楼 zhxianbin 的回复:] INCLUDEPATH += //头文件路径 LIBS += -L ..\BS_win32\libs -l xml2.lib
哈哈 这个成功了 上面的xmlfree的问题也解决了! 现在的问题是建个文件夹路径的问题 让程序运行在linux时创建文件为/tmp/image,在windows运行时创建为D://image文件夹 QT中有没有全局识别windows还是linux的宏? 就像__WIN32 __LINUX__这样的?[/quote]4 楼不是吗?[/quote] 哥们 我又来了 现在所有的问题都完美解决了!不用修改源码就可以直接在windows下编译后运行 现在该制作安装包了,我的软件不是静态编译的,那么在一个没有qt相关dll库的电脑上是不能运行的,会提示少XXX.dll文件!然后我把相关的dll文件拷贝过去就可以,但是我发现在qt安装目录下好多dll文件是不需要的,但是我不能分辨出来哪些是需要的哪些是不需要的,哥们 给点指点![/quote]arm-linux-readelf -d <file>
zhxianbin 2013-09-12
  • 打赏
  • 举报
回复
引用 12 楼 jk110333 的回复:
[quote=引用 11 楼 zhxianbin 的回复:] INCLUDEPATH += //头文件路径 LIBS += -L ..\BS_win32\libs -l xml2.lib
哈哈 这个成功了 上面的xmlfree的问题也解决了! 现在的问题是建个文件夹路径的问题 让程序运行在linux时创建文件为/tmp/image,在windows运行时创建为D://image文件夹 QT中有没有全局识别windows还是linux的宏? 就像__WIN32 __LINUX__这样的?[/quote]4 楼不是吗?
siasjack 2013-09-12
  • 打赏
  • 举报
回复
引用 11 楼 zhxianbin 的回复:
INCLUDEPATH += //头文件路径 LIBS += -L ..\BS_win32\libs -l xml2.lib
哈哈 这个成功了 上面的xmlfree的问题也解决了! 现在的问题是建个文件夹路径的问题 让程序运行在linux时创建文件为/tmp/image,在windows运行时创建为D://image文件夹 QT中有没有全局识别windows还是linux的宏? 就像__WIN32 __LINUX__这样的?
zhxianbin 2013-09-12
  • 打赏
  • 举报
回复
INCLUDEPATH += //头文件路径 LIBS += -L ..\BS_win32\libs -l xml2.lib
siasjack 2013-09-12
  • 打赏
  • 举报
回复
引用 9 楼 zhxianbin 的回复:
debug 一下吧,看看什么地方读 0x0 地址了、应该是指针变量赋值有错吧
debug 出来了 程序以调用xmlFree就会出现崩溃,都换成free就可以了! 网上也有解决方法,但是没怎么看懂,没有windows下编译软件的经验,下面是我复制出来的解决方法,帮忙看下,我该怎么操作 ============================================================================================ 程序一运行就崩溃了!gdb看了一下,又是xmlFree! 原来,libxml2的windows二进制版本是用Microsoft C编译链接的,一般情况下,mingw中的pexport和dlltool都能链接到动态库并正常工作,除了dll库中的静态数据。libxml2中的xmlFree、xmlMalloc和xmlRealloc都是以静态变量的形式出现的。具体原因可以看这里:http://www.linuxquestions.org/questions/programming-9/[solved]using-libxml2-on-mingw-xmlfree-crashes-839802/ 解决的办法是在xmlParseFile或者其它xml函数初始化DLL变量后,加入: if(!xmlFree) xmlMemGet(&xmlFree,&xmlMalloc,&xmlRealloc,NULL); 才能解决问题。 ====================================================================== 另外还要请教一个问题,就是我的程序使用libxml2的lib文件时是在pro文件中加入 LIBS += ..\BS_win32\libs\libxml2.lib 这样的语句,在调用头文件时却说找不到,请问这个头文件是不是该放在qt或者一个固定的全局识别的地方?我解决的方法很傻,把所有#include <libxml/xmlversion.h>都换成了#include "xmlversion.h",把头文件都放到当前的目录下,最后编译可以通过了! 正常的解决方式怎样的? 多谢大哥啊!
siasjack 2013-09-12
  • 打赏
  • 举报
回复
引用 13 楼 zhxianbin 的回复:
[quote=引用 12 楼 jk110333 的回复:] [quote=引用 11 楼 zhxianbin 的回复:] INCLUDEPATH += //头文件路径 LIBS += -L ..\BS_win32\libs -l xml2.lib
哈哈 这个成功了 上面的xmlfree的问题也解决了! 现在的问题是建个文件夹路径的问题 让程序运行在linux时创建文件为/tmp/image,在windows运行时创建为D://image文件夹 QT中有没有全局识别windows还是linux的宏? 就像__WIN32 __LINUX__这样的?[/quote]4 楼不是吗?[/quote] 哦 明白了 也就是需要两次编译,分别在windows上和linux上
siasjack 2013-09-10
  • 打赏
  • 举报
回复
引用 2 楼 abc19abc91 的回复:
#ifdef Q_OS_MAC // mac #endif #ifdef Q_OS_LINUX // linux #endif #ifdef Q_OS_WIN32 // win #endif
简单易懂 多谢哥们!
siasjack 2013-09-10
  • 打赏
  • 举报
回复
引用 1 楼 zhxianbin 的回复:
http://blog.csdn.net/immcss/article/details/3881827
多谢哥们指点 现在还有个问题是怎么调用第三方的库,我已经下载了dll文件和lib文件,怎么放置? 怎么做才能做到移植到linux很轻松
kael_9527 2013-09-10
  • 打赏
  • 举报
回复
#ifdef Q_OS_MAC // mac #endif #ifdef Q_OS_LINUX // linux #endif #ifdef Q_OS_WIN32 // win #endif
zhxianbin 2013-09-10
  • 打赏
  • 举报
回复
debug 一下吧,看看什么地方读 0x0 地址了、应该是指针变量赋值有错吧
siasjack 2013-09-10
  • 打赏
  • 举报
回复
引用 7 楼 zhxianbin 的回复:
[quote=引用 6 楼 jk110333 的回复:]
[quote=引用 5 楼 zhxianbin 的回复:]
dll 本身在linux是不能用的,能不能转换成 so 就不知道了,搜索一下 depends 这个软件试试行不行

这个我知道 其实我的目的就是想写出来的软件在win下和linux下不做任何修改就直接可以运行成功!

有什么思路呢?
[/quote]如果 dll 不能转换为 so,你自己的可以跨平台也是没用的啊[/quote]

现在降低了要求,两个程序独立,只不过软件实现的功能一样

现在移植到windows基本上可以了,但是运行后出现下面的,不能read
zhxianbin 2013-09-10
  • 打赏
  • 举报
回复
引用 6 楼 jk110333 的回复:
[quote=引用 5 楼 zhxianbin 的回复:] dll 本身在linux是不能用的,能不能转换成 so 就不知道了,搜索一下 depends 这个软件试试行不行
这个我知道 其实我的目的就是想写出来的软件在win下和linux下不做任何修改就直接可以运行成功! 有什么思路呢? [/quote]如果 dll 不能转换为 so,你自己的可以跨平台也是没用的啊
siasjack 2013-09-10
  • 打赏
  • 举报
回复
引用 5 楼 zhxianbin 的回复:
dll 本身在linux是不能用的,能不能转换成 so 就不知道了,搜索一下 depends 这个软件试试行不行
这个我知道 其实我的目的就是想写出来的软件在win下和linux下不做任何修改就直接可以运行成功! 有什么思路呢?
zhxianbin 2013-09-10
  • 打赏
  • 举报
回复
dll 本身在linux是不能用的,能不能转换成 so 就不知道了,搜索一下 depends 这个软件试试行不行

16,235

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧