如題。Linux下交叉編譯ntp原始碼,最終編譯出的ntpd為shared object,為嘛不應該是executable object檔案。
ntpd: ELF 32-bit LSB shared object, ARM, EABI4 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.14, not stripped
uj5u.com熱心網友回復:
應該是編譯選項沒有打開uj5u.com熱心網友回復:
最近一直在搞這個編譯,gcc編譯器用的4.2.0,交叉編譯舊版本的ntp原始碼是編譯成executable的,新版ntp原始碼編譯完后成了shared object,放到開發板上后運行出現段錯誤。編譯器沒變,只是原始碼有升級。后來也找了很多的相關解釋,有說是生成shared object是因為有pie和pic編譯選項造成的。現在問題比較混亂,不知道是gcc編譯選項問題,還是我新版ntp原始碼問題,比較糾結。uj5u.com熱心網友回復:
著你這么說應該是你的高版本原始碼出現了問題,肯呢是高版本的原始碼makefile.in有改動吧,你可以看看uj5u.com熱心網友回復:
應該不是Makefile.in的問題,我比對了新舊兩個版本,都是小的改動,而且我用舊版Makefile.in編譯新的原始碼,問題仍舊存在。但我發現有個區別,configure時,新舊版產生的資訊不一致。新版里面增加了pie選項,而舊版里面沒有,我在網上也查了pie選項可以使executable程式編譯成shared格式,現在的問題是,我們如何去掉此pie選項?如下是配置資訊里面截取出來的。configure: running /bin/bash ./configure --disable-option-checking '--prefix=/home/lhq/ntpcmd' 'LEP_LDFLAGS=-pie -Wl,-z,relro -Wl,-z,now' 'LEP_CPPFLAGS=-D_FORTIFY_SOURCE=2' 'LEP_CFLAGS=-fPIE -fPIC -fstack-protector-all -O1' '--enable-function-sections' '--enable-silent-rules' '--disable-libevent-install' '--disable-libevent-regress' '--disable-shared' '--disable-openssl' 'CC=/opt/arm-2007q1/bin/arm-none-linux-gnueabi-gcc' '--host=arm-none-linux-gnueabi' '--with-yielding-select=yes' 'host_alias=arm-none-linux-gnueabi' --cache-file=/dev/null --srcdir=.
uj5u.com熱心網友回復:
看 link 時是否開啟了 -r, -i, --relocatable 選項uj5u.com熱心網友回復:
試了用 -pie 的確會生成 shared object,正常應該不影響使用的才對……uj5u.com熱心網友回復:
修改configure.ac這個檔案是編譯檢查選項轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/113267.html
標籤:應用程序開發區
上一篇:/dev/mem不允許的操作
