使用crosstool腳本我在Cygwin下編譯了以下編譯器gcc-4.1.1和4.2.0 20061024(預發佈)的SPARC架構:編譯時出現`__sync_val_compare_and_swap_4'未定義引用錯誤,使用gcc 4.1.1和4.2.0作爲Sparc v8目標
$ ./sparc-unknown-linux-gnu-gcc -v
Using built-in specs.
Target: sparc-unknown-linux-gnu
Configured with: /crosstool-0.43/build/sparc-unknown-linux-gnu/gcc-4.1.1-glibc-2.3.6/gcc-4.1.1/configure --target=sparc-unknown-linux-gnu --host=i686-host_pc-cygwin --prefix=/opt/crosstool/gcc-4.1.1-glibc-2.3.6/sparc-unknown-linux-gnu --with-headers=/opt/crosstool/gcc-4.1.1-glibc-2.3.6/sparc-unknown-linux-gnu/sparc-unknown-linux-gnu/include --with-local-prefix=/opt/crosstool/gcc-4.1.1-glibc-2.3.6/sparc-unknown-linux-gnu/sparc-unknown-linux-gnu --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 4.1.1
和
$ ./sparc-unknown-linux-gnu-gcc -v
Using built-in specs.
Target: sparc-unknown-linux-gnu
Configured with: /crosstool-0.43/build/sparc-unknown-linux-gnu/gcc-4.2-20061024- glibc-2.3.6/gcc-4.2-20061024/configure --target=sparc-unknown-linux-gnu --host=i 686-host_pc-cygwin --prefix=/opt/crosstool/gcc-4.2-20061024-glibc-2.3.6/sparc-un known-linux-gnu --with-headers=/opt/crosstool/gcc-4.2-20061024-glibc-2.3.6/sparc -unknown-linux-gnu/sparc-unknown-linux-gnu/include --with-local-prefix=/opt/cros stool/gcc-4.2-20061024-glibc-2.3.6/sparc-unknown-linux-gnu/sparc-unknown-linux-g nu --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atex it --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 4.2.0 20061024 (prerelease)
有必要對我說,我可以在我的程序中使用__sync_val_compare_and_swap
功能相關Atomic-Builtins,它支持蒙山4.1 *版本克CC。
我嘗試編譯簡單的C代碼:
long cmpxchg(long* value, long comp_val, long new_val)
{
return __sync_val_compare_and_swap(value, comp_val, new_val);
}
int main()
{
return 0;
}
但我有以下錯誤:(在兩種編譯器):
$ ./sparc-unknown-linux-gnu-gcc test_cas.c -o test_cas
/tmp/ccREXHsP.o: In function `cmpxchg':
test_cas.c:(.text+0x24): undefined reference to `__sync_val_compare_and_swap_4'
collect2: ld returned 1 exit status
什麼問題?可能是我錯誤的編譯器?可能是Sparc體系結構(SPARC v8)不支持此功能?我試圖編譯我的另一個程序 - 一切正常(編譯和執行)。
加入-lgcc_s:$ ./sparc-unknown-linux-gnu-gcc test_cas.c -lgcc_s -o test_cas不幫我。同樣的錯誤。但我試圖找到文本「__sync_val_compare_and_swap_4」,結果是以下文件:sparc-unknown-linux-gnu \ bits \ stdC++。h.gch \ O0g.gch,sparc-unknown-linux-gnu \ bits \ stdC++。 gch \ O2g.gch,gcc \ builtins.def,cc1.exe,cc1plus.exe等。 – 2012-02-17 13:56:10
你必須把庫鏈接_after_輸出:'./sparc-unknown-linux-gnu-gcc test_cas.c -o test_cas -lgcc_s' – Coren 2012-02-17 14:53:34
:(有一個相同的錯誤 – 2012-02-17 15:15:37