前幾天看到gitorious上有人移植了,但是下載連結打不開,於是clone了他的項目打算自己編譯。後來發現他是在mac上移植的,mkspec還要自己重新。借鑒了他的代碼,自己寫了mkspec,感覺比他寫得好。
編譯過程會遇到一些問題,只要是條件編譯問題,解決起來不難。最噁心的一個問題是編譯qlibraryinfo.cpp時出現如此錯誤
[plain]
view plaincopy
- {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的源碼,發現這麼幾句
[cpp]
view plaincopy
- 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竟然沒有問題了。
後最後終於到了振奮人心的連結過程了,有幾個連結參數不支援,
[plain]
view plaincopy
- -Wl,-O1 -Wl,--no-undefined Wl,-so-name
其中-so-name可以用這個來代替
[plain]
view plaincopy
- QMAKE_LFLAGS_SONAME += -install_name$${LITERAL_WHITESPACE}
去掉後可以了。
編譯好的庫和一個測試程式放到ipad上,程式運行不起來,有類似如下錯誤:
[plain]
view plaincopy
- 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.csdn.net/ibingow/article/details/7409111