使用mips toolchain編譯的問題

我們生活周遭存在太多太多的 embedded system ,過去 embedded system 有專屬的 OS,現在 linux 也可以應用在嵌入式環境,不過本版將廣泛討論所有嵌入式系統不只 linux 喔,歡迎有這方面經驗或有興趣的朋友一同進來討論。

版主: chester

使用mips toolchain編譯的問題

文章shinstar » 週四 3月 25, 2010 5:09 pm

各位前輩好,
小弟最近遇到一個問題
我有一個mips-linux toolchain預設是big endian的
但開發板的mips是設定成little endian
我下mips-linux-gnu-gcc -EL把自己的code強制編譯成little endian也可以順利執行
問題在於若要編譯其他open source的code時
configure再make後總是編成big endian
在CFLAGS跟CXXFLAGS中加入 -EL參數後會有
"compile for a little endian system and target is big endian"以及
"endianess incompactible with that of the selected emulation"
請問我應該如何修改呢?
還是應該找別的toolchain?
shinstar
可愛的小學生
可愛的小學生
 
文章: 5
註冊時間: 週二 8月 25, 2009 3:53 pm

Re: 使用mips toolchain編譯的問題

文章FourDollars » 週四 3月 25, 2010 9:05 pm

`gcc --help`
代碼: 選擇全部
Usage: gcc [options] file...
Options:
  -pass-exit-codes         Exit with highest error code from a phase
  --help                   Display this information
  --target-help            Display target specific command line options
  --help={target|optimizers|warnings|params|[^]{joined|separate|undocumented}}[,...]
                           Display specific types of command line options
  (Use '-v --help' to display command line options of sub-processes)
  --version                Display compiler version information
  -dumpspecs               Display all of the built in spec strings
  -dumpversion             Display the version of the compiler
  -dumpmachine             Display the compiler's target processor
  -print-search-dirs       Display the directories in the compiler's search path
  -print-libgcc-file-name  Display the name of the compiler's companion library
  -print-file-name=<lib>   Display the full path to library <lib>
  -print-prog-name=<prog>  Display the full path to compiler component <prog>
  -print-multi-directory   Display the root directory for versions of libgcc
  -print-multi-lib         Display the mapping between command line options and
                           multiple library search directories
  -print-multi-os-directory Display the relative path to OS libraries
  -print-sysroot           Display the target libraries directory
  -print-sysroot-headers-suffix Display the sysroot suffix used to find headers
  -Wa,<options>            Pass comma-separated <options> on to the assembler
  -Wp,<options>            Pass comma-separated <options> on to the preprocessor
  -Wl,<options>            Pass comma-separated <options> on to the linker
  -Xassembler <arg>        Pass <arg> on to the assembler
  -Xpreprocessor <arg>     Pass <arg> on to the preprocessor
  -Xlinker <arg>           Pass <arg> on to the linker
  -combine                 Pass multiple source files to compiler at once
  -save-temps              Do not delete intermediate files
  -pipe                    Use pipes rather than intermediate files
  -time                    Time the execution of each subprocess
  -specs=<file>            Override built-in specs with the contents of <file>
  -std=<standard>          Assume that the input sources are for <standard>
  --sysroot=<directory>    Use <directory> as the root directory for headers
                           and libraries
  -B <directory>           Add <directory> to the compiler's search paths
  -b <machine>             Run gcc for target <machine>, if installed
  -V <version>             Run gcc version number <version>, if installed
  -v                       Display the programs invoked by the compiler
  -###                     Like -v but options quoted and commands not executed
  -E                       Preprocess only; do not compile, assemble or link
  -S                       Compile only; do not assemble or link
  -c                       Compile and assemble, but do not link
  -o <file>                Place the output into <file>
  -x <language>            Specify the language of the following input files
                           Permissible languages include: c c++ assembler none
                           'none' means revert to the default behavior of
                           guessing the language based on the file's extension

Options starting with -g, -f, -m, -O, -W, or --param are automatically
 passed on to the various sub-processes invoked by gcc.  In order to pass
 other options on to these processes the -W<letter> options must be used.

For bug reporting instructions, please see:
<file:///usr/share/doc/gcc-4.4/README.Bugs>.

try `-Xlinker -EL` or relative others.
FourDollars
懵懂的國中生
懵懂的國中生
 
文章: 188
註冊時間: 週五 8月 01, 2003 12:47 am

Re: 使用mips toolchain編譯的問題

文章FourDollarsOffline » 週五 3月 26, 2010 12:01 pm

如果你的 package 有使用 GNU Build System (Autotools) 的話
試試看
代碼: 選擇全部
./configure --build i686-pc-linux-gnu --host mips-linux-gnu CPPFLAGS='-EL' LDFLAGS='-XCClinker -EL'
FourDollarsOffline
 

Re: 使用mips toolchain編譯的問題

文章shinstar » 週一 3月 29, 2010 4:04 pm

感謝前輩的熱心回應
經測試後兩種方式都會得到以下結果
/opt/mips-4.3/bin/../mips-linux-gnu/libc/usr/lib/libstdc++.so: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make: *** [libmp4v2.la] Error 1
請問我應該如何修改呢?
用file指令查看libstdc++.so所指向的檔案後訊息是
bash-3.1$ file libstdc++.so
libstdc++.so: symbolic link to `libstdc++.so.6.0.10'
bash-3.1$ file libstdc++.so.6.0.10
libstdc++.so.6.0.10: ELF 32-bit MSB shared object, MIPS, MIPS64 version 1 (SYSV), not stripped
(我想gcc應該沒問題,用c與c++寫的hello world都可以執行)
shinstar
可愛的小學生
可愛的小學生
 
文章: 5
註冊時間: 週二 8月 25, 2009 3:53 pm

Re: 使用mips toolchain編譯的問題

文章FourDollars » 週一 3月 29, 2010 11:16 pm

先寫個簡單的 main.c
然後 mips-linux-gnu-gcc -EL main.c -o main
然後把 file main 的訊息貼出來看看嗎?
還有 mips-linux-gnu-gcc -v 也貼一下
FourDollars
懵懂的國中生
懵懂的國中生
 
文章: 188
註冊時間: 週五 8月 01, 2003 12:47 am

Re: 使用mips toolchain編譯的問題

文章shinstar » 週二 3月 30, 2010 3:11 pm

我分別用C與C++寫了一個hello world
用mips-linux-gnu-gcc -EL 編譯成hello_EL以及helloc++
結果如下:
C++:
bash-3.1$ file /mnt/hgfs/share/helloc++
/mnt/hgfs/share/helloc++: ELF 32-bit LSB executable, MIPS, MIPS64 version 1, for GNU/Linux 2.6.12, dynamically linked (uses shared libs), for GNU/Linux 2.6.12, not stripped
C:
bash-3.1$ file /mnt/hgfs/share/hello_EL
/mnt/hgfs/share/hello_EL: ELF 32-bit LSB executable, MIPS, MIPS64 version 1, for GNU/Linux 2.6.12, dynamically linked (uses shared libs), for GNU/Linux 2.6.12, not stripped
兩個在板子上都可以順利執行

mips-linux-gnu-gcc -v 印出的訊息
bash-3.1$ /opt/mips-4.3/bin/mips-linux-gnu-gcc -v
Using built-in specs.
Target: mips-linux-gnu
Configured with: /scratch/clm/2008q3-src/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=mips-linux-gnu --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-arch=mips32r2 --with-float=hard --enable-mips-nonpic --enable-extra-sgxxlite-multilibs --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 4.3-51' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/mips-linux-gnu/libc --with-build-sysroot=/scratch/clm/2008q3-lite/install/mips-linux-gnu/libc --with-gmp=/scratch/clm/2008q3-lite/obj/host-libs-4.3-51-mips-linux-gnu-i686-pc-linux-gnu/usr --with-mpfr=/scratch/clm/2008q3-lite/obj/host-libs-4.3-51-mips-linux-gnu-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/clm/2008q3-lite/install/mips-linux-gnu/bin --with-build-time-tools=/scratch/clm/2008q3-lite/install/mips-linux-gnu/bin
Thread model: posix
gcc version 4.3.2 (Sourcery G++ Lite 4.3-51)

google了一下找到這篇
http://orzlab.blogspot.com/2007/05/cros ... btool.html
但我的問題跟這篇似乎又不太一樣
感謝您的熱心回覆
shinstar
可愛的小學生
可愛的小學生
 
文章: 5
註冊時間: 週二 8月 25, 2009 3:53 pm

Re: 使用mips toolchain編譯的問題

文章lazyfai » 週一 4月 19, 2010 2:00 pm

如果不介意用 Fedora 的話,我最近在弄 Fedora-MIPS:
http://fedoraproject.org/wiki/Architectures/MIPS
Extended Eee PC:
http://www.xepc.org/
lazyfai
可愛的小學生
可愛的小學生
 
文章: 1
註冊時間: 週二 2月 19, 2008 12:15 am
來自: 香港


回到 embedded system

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客