前几天看到gitorious上有人移植了,但是下载链接打不开,于是clone了他的项目打算自己编译。后来发现他是在mac上移植的,mkspec还要自己重新。借鉴了他的代码,自己写了mkspec,感觉比他写得好。
网上查了一下,资料很少,而且都是mac的gcc编译会出现这个错误,但是找不到解决方法。这应该是一个汇编错误,后来在google code上看到了as的源码,发现这么几句
可能有希望了。于是我一步步来,先预处理,然后汇编,最后编译成.o文件,最后这步果然错了,就是那个错误。于是打开汇编代码,找到那行,再根据as的代码,在那行最后加了个逗号,竟然编译成功了。册那,超有成就感,还从没这么搞过。后来发现改了mkspec竟然没有问题了。
其中-so-name可以用这个来代替
编译过程会遇到一些问题,只要是条件编译问题,解决起来不难。最恶心的一个问题是编译qlibraryinfo.cpp时出现如此错误
- {standard input}:4384:Expected comma after segment-name
- {standard input}:4384:Rest of line ignored. 1st junk character valued 32 ( ).
网上查了一下,资料很少,而且都是mac的gcc编译会出现这个错误,但是找不到解决方法。这应该是一个汇编错误,后来在google code上看到了as的源码,发现这么几句
- SKIP_WHITESPACE();
- segname = input_line_pointer;
- do{
- c = *input_line_pointer++ ;
- }while(c != ',' && c != '\0' && c != '\n');
- if(c != ','){
- as_bad("Expected comma after segment-name");
- ignore_rest_of_line();
- return;
- }
可能有希望了。于是我一步步来,先预处理,然后汇编,最后编译成.o文件,最后这步果然错了,就是那个错误。于是打开汇编代码,找到那行,再根据as的代码,在那行最后加了个逗号,竟然编译成功了。册那,超有成就感,还从没这么搞过。后来发现改了mkspec竟然没有问题了。
后最后终于到了振奋人心的链接过程了,有几个链接参数不支持,
- -Wl,-O1 -Wl,--no-undefined Wl,-so-name
- QMAKE_LFLAGS_SONAME += -install_name$${LITERAL_WHITESPACE}
去掉后可以了。
编译好的库和一个测试程序放到ipad上,程序运行不起来,有类似如下错误:
- dyld: Library not loaded: @executable_path/
- Referenced from: /usr/lib/libQtNetwork.4.dylib
- Reason: no suitable image found. Did find:
- /private/var/mobile/./: not a file
- /private/var/mobile/: not a file
- /usr/local/lib/: not a file
- /usr/lib/: not a file
- Trace/BPT trap: 5
感觉是链接参数的问题,有些参数是抄gitorious上那人的,去掉后就好了。后来重写了mkspecs,发现编译很顺利,之前的汇编问题也不见了,不明真相,估计是某个cxxflag搞鬼吧,不管了。
目前移植了core, xml, network, sql模块,测试了QtCore和QtNetwork模块,工作正常。gui模块还有编译错误,继续努力!
放上链接
我在gitorius上项目为:https://gitorious.org/~ibingow/qt/ibingows-qt-ios-plaszma
编译好的库在这里下载:http://code.google.com/p/qtbuild/downloads/list
转自:http://blog.youkuaiyun.com/ibingow/article/details/7409111