2015-06-19 61 views
0

我有一些C++代碼可以很好地在Linux上編譯,但到目前爲止我無法在NetBSD上正確編譯它。C++編譯錯誤NetBSD':: system'尚未聲明

這些都是我的,包括:

#include <fstream> 
#include <iostream> 
#include <cstdlib> 
#include <unistd.h> 
#include <iomanip> 
#include <boost/regex.hpp> 

我用這個命令編譯:

g++ -v -O2 -fno-strict-aliasing -I /usr/pkg/include \ 
barefoot.cpp -o barefoot -L /usr/pkg/lib/ -lboost_regex \ 
-L /usr/pkg/lib/ -lboost_regex -lpthreads 

這使得這樣的輸出:

Using built-in specs. 
COLLECT_GCC=g++ 
Target: x86_64--netbsd 

Configured with: /usr/src2/tools/gcc/../../external/gpl3/gcc/dist/configure --target=x86_64--netbsd --enable-long-long --enable-threads --with-bugurl=http://www.NetBSD.org/Misc/send-pr.html --with-pkgversion='NetBSD nb2 20111202' --enable-__cxa_atexit --with-tune=nocona --with-mpc=/var/obj/mknative/amd64/usr/src2/destdir.amd64/usr --with-mpfr=/var/obj/mknative/amd64/usr/src2/destdir.amd64/usr --with-gmp=/var/obj/mknative/amd64/usr/src2/destdir.amd64/usr --enable-tls --disable-multilib --disable-symvers --disable-libstdcxx-pch --build=x86_64-unknown-netbsd5.99.56 --host=x86_64--netbsd 

Thread model: posix 

gcc version 4.5.3 (NetBSD nb2 20110806) 
COLLECT_GCC_OPTIONS='-v' '-O2' '-fno-strict-aliasing' '-I' '/usr/pkg/include/' '-o' 'a.out' '-L' '/usr/pkg/lib/' '-mtune=nocona' '-march=x86-64' 
/usr/libexec/cc1plus -quiet -v -I /usr/pkg/include/ barefoot.cpp -quiet -dumpbase barefoot.cpp -mtune=nocona -march=x86-64 -auxbase barefoot -O2 -version -fno-strict-aliasing -o /var/tmp//cc9Dcmwi.s 
GNU C++ (NetBSD nb2 20110806) version 4.5.3 (x86_64--netbsd) 
     compiled by GNU C version 4.5.3, GMP version 5.0.2, MPFR version 3.0.1-p4, MPC version 0.9 

GGC heuristics: --param ggc-min-expand=99 --param ggc-min-heapsize=131007 
#include "..." search starts here: 
#include <...> search starts here: 
/usr/pkg/include/ 
/usr/include/g++ 
/usr/include/g++/backward 
/usr/include/gcc-4.5 
/usr/include 
End of search list. 

GNU C++ (NetBSD nb2 20110806) version 4.5.3 (x86_64--netbsd) 
     compiled by GNU C version 4.5.3, GMP version 5.0.2, MPFR version 3.0.1-p4, MPC version 0.9 
GGC heuristics: --param ggc-min-expand=99 --param ggc-min-heapsize=131007 
Compiler executable checksum: a34e7d170f4dd8d4687d2b62e8dca4b7 
In file included from /usr/include/g++/bits/gthr.h:166:0, 
       from /usr/include/g++/ext/atomicity.h:34, 
       from /usr/include/g++/bits/ios_base.h:41, 
       from /usr/include/g++/ios:43, 
       from /usr/include/g++/istream:40, 
       from /usr/include/g++/fstream:40, 
       from barefoot.cpp:29: 
/usr/include/g++/bits/gthr-default.h:130:9: error: 'pthread_detach' was not declared in this scope 
/usr/include/g++/bits/gthr-default.h:130:1: error: invalid type in declaration before ';' token 
/usr/include/g++/bits/gthr-default.h: In function 'int __gthread_detach(pthread_st*)': 
/usr/include/g++/bits/gthr-default.h:668:46: error: '__gthrw_pthread_detach' cannot be used as a function 
In file included from /usr/pkg/include/boost/regex/v4/regex_workaround.hpp:25:0, 
       from /usr/pkg/include/boost/regex/v4/regex.hpp:32, 
       from /usr/pkg/include/boost/regex.hpp:31, 
       from barefoot.cpp:32: 
/usr/include/g++/cstdlib: At global scope: 
/usr/include/g++/cstdlib:132:11: error: '::system' has not been declared 

我嘗試添加-lpthread,但導致相同的輸出。不知道接下來要嘗試什麼。

+1

看起來你忘了'#include'所需的標題,例如: ''或''? –

+0

謝謝。我添加了unistd.h但沒有改變。相同的確切輸出。 –

+1

嘗試添加'-pthread',而不是'-lpthread'。 – jxh

回答

2

我不確定你爲什麼面臨這個問題,但我可以爲你提供一些下一步的嘗試。

  • 請注意,第一個錯誤是缺少pthread_detach。系統頭文件通常會確保包含他們需要的任何標題,但您可以嘗試在所有其他標題上添加<pthread.h>

  • 如果不成功,您需要弄清楚添加#include <pthread.h>的結果包含哪個文件,並確保其中存在pthread_detach(它確實應該在某處)。

  • 假設它在那裏,必須有一些條件編譯導致它不能被源代碼看到。找到有條件的守衛,以及哪些宏觀價值影響它。

  • 然後,您將需要明白爲什麼您的系統定義宏值的方式導致函數pthread_detach不可見。

通過此調查,您可能會發現您不包括正確的<pthread.h>文件。這可能是由於系統包含與您要使用的包含目錄衝突的目錄。

This answer(它朝下)this question顯示瞭如何顯示g++編譯器的預定義宏。