ubuntu64位系统编译时头文件找不到的问题(可以查看g++ -v路径,设置export C_INCLUDE_PATH)

今天编译webrtc时出现以下错误:

ninja -C out/Debug All
ninja: Entering directory `out/Debug‘
[1/6] CXX obj/talk/app/webrtc/java/jni...peerconnection_so.peerconnection_jni.o
FAILED: g++ -MMD -MF obj/talk/app/webrtc/java/jni/libjingle_peerconnection_so.peerconnection_jni.o.d -DANGLE_DX11 -DEXPAT_RELATIVE_PATH -DFEATURE_ENABLE_VOICEMAIL -DGTEST_RELATIVE_PATH -DJSONCPP_RELATIVE_PATH -DLOGGING=1 -DSRTP_RELATIVE_PATH -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_PSTN -DHAVE_SRTP -DHAVE_WEBRTC_VIDEO -DHAVE_WEBRTC_VOICE -DUSE_WEBRTC_DEV_BRANCH -D_FILE_OFFSET_BITS=64 -DCHROMIUM_BUILD -DUSE_DEFAULT_RENDER_THEME=1 -DUSE_LIBJPEG_TURBO=1 -DUSE_NSS=1 -DUSE_X11=1 -DENABLE_ONE_CLICK_SIGNIN -DGTK_DISABLE_SINGLE_INCLUDES=1 -DUSE_XI2_MT=2 -DENABLE_REMOTING=1 -DENABLE_WEBRTC=1 -DENABLE_PEPPER_CDMS -DENABLE_CONFIGURATION_POLICY -DENABLE_INPUT_SPEECH -DENABLE_NOTIFICATIONS -DENABLE_EGLIMAGE=1 -DENABLE_TASK_MANAGER=1 -DENABLE_EXTENSIONS=1 -DENABLE_PLUGIN_INSTALLATION=1 -DENABLE_PLUGINS=1 -DENABLE_SESSION_SERVICE=1 -DENABLE_THEMES=1 -DENABLE_BACKGROUND=1 -DENABLE_AUTOMATION=1 -DENABLE_GOOGLE_NOW=1 -DCLD_VERSION=2 -DENABLE_FULL_PRINTING=1 -DENABLE_PRINTING=1 -DENABLE_SPELLCHECK=1 -DENABLE_CAPTIVE_PORTAL_DETECTION=1 -DENABLE_MANAGED_USERS=1 -DENABLE_MDNS=1 -DLIBPEERCONNECTION_LIB=1 -DLINUX -DHASH_NAMESPACE=__gnu_cxx -DPOSIX -DDISABLE_DYNAMIC_CAST -DHAVE_OPENSSL_SSL_H=1 -D_REENTRANT -DHAVE_GTK -DU_USING_ICU_NAMESPACE=0 -DU_STATIC_IMPLEMENTATION -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DWTF_USE_DYNAMIC_ANNOTATIONS=1 -D_DEBUG -I../.. -I../../third_party -I../../third_party/webrtc -I../../webrtc -I/data/jdk1.7.0_45/include -I/data/jdk1.7.0_45/include/linux -I../../third_party/icu/source/common -fstack-protector --param=ssp-buffer-size=4 -pthread -fno-exceptions -fno-strict-aliasing -Wno-unused-parameter -Wno-missing-field-initializers -fvisibility=hidden -pipe -fPIC -Wno-unused-local-typedefs -Wno-format -Wno-unused-result -O0 -g -fno-rtti -fno-threadsafe-statics -fvisibility-inlines-hidden -Wno-deprecated  -c ../../talk/app/webrtc/java/jni/peerconnection_jni.cc -o obj/talk/app/webrtc/java/jni/libjingle_peerconnection_so.peerconnection_jni.o
../../talk/app/webrtc/java/jni/peerconnection_jni.cc: In function ‘std::string {anonymous}::GetThreadId()’:
../../talk/app/webrtc/java/jni/peerconnection_jni.cc:149:63: error: ‘syscall’ was not declared in this scope
   CHECK(snprintf(buf, sizeof(buf), "%llu", syscall(__NR_gettid)) <= sizeof(buf),
                                                               ^
../../talk/app/webrtc/java/jni/peerconnection_jni.cc:113:7: note: in definition of macro ‘CHECK’
   if (x) {} else {                                                             \
       ^
ninja: build stopped: subcommand failed.

说找不到linux系统头文件syscall.h文件。

搜索syscall.h头文件位于哪个包中:

dpkg-query -S syscall.h
发现已经安装在/usr/include/x86_64-linux-gnu/sys中。这是由于ubuntu为了安装不同架构的系统而分出来的。

查看g++联接:

k@k-C410:/data/google/trunk$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion=‘Ubuntu/Linaro 4.8.1-10ubuntu8‘ --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8)

解决方法:

export CPLUS_INCLUDE_PATH=/usr/include/x86_64-linux-gnu/
export C_INCLUDE_PATH=/usr/include/x86_64-linux-gnu/

加入下面下行:

#define _GNU_SOURCE         /* See feature_test_macros(7) */
#include <unistd.h>
#include <sys/syscall.h>   /* For SYS_xxx definitions */

ubuntu中syscall定义是放在头文件unistd.h中的。

在网上发现与此问题找不到库的类似的问题:http://zhaohongjian000.is-programmer.com/posts/32631.html
---------------------
作者:kl222
来源:CSDN
原文:https://blog.csdn.net/kl222/article/details/17025367
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/findumars/p/10603390.html

时间: 2024-10-24 09:57:16

ubuntu64位系统编译时头文件找不到的问题(可以查看g++ -v路径,设置export C_INCLUDE_PATH)的相关文章

gcc在编译时头文件路径和动态链接库路径

在使用gcc编译连接生成可执行文件时,经常会碰到变量未定义.链接时或者运行可执行文件时找不到相应的动态库等问题,本文首先介绍了gcc在编译时头文件路径相关选项以及搜索路径顺序,然后讨论了编译成可执行文件时动态库的搜索路径顺序,最后说明了生成可执行文件后,运行文件时动态库的搜索路径顺序.搞清楚这三个搜索路径,在用gcc碰到的未定义变量或搜索不到动态库的问题,基本上都可以解决了. 头文件路径编译时相关选项 gcc可以使用选项-I(注意是大写)来指定头文件搜索路径,即头文件所在的文件夹.指定的路径即可

27&gt;&gt;gcc编译时头文件和库文件搜索路径

一.头文件 gcc 在编译时寻找所需要的头文件 : ※搜寻会从-I开始(gcc 参数,指定头文件搜索位置) ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH ※再找内定目录 /usr/include /usr/local/include /usr/lib/gcc-lib/i386-linux/2.95.2/include /usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i

linux-gcc 编译时头文件和库文件搜索路径

一.头文件  gcc 在编译时寻找所需要的头文件 :  ※搜寻会从-I开始  ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH  ※再找内定目录/usr/include /usr/local/include/usr/lib/gcc-lib/i386-linux/2.95.2/include/usr/lib/gcc-lib/i386-linux/2.95.2/include/g++-3/usr/lib/gcc-lib/

多文件程序编译时头文件的使用方法

如果把main函数放在第一个文件中,而把自定义函数放在第二个文件中,那就是需要在一个文件中声明函数原型如果把函数原型包含在一个头文件里,那么每次使用函数的时候就不用声明其原型了 把函数声明放在头文件里,是很好的习惯 #ifndef是预编译指令,代表如果没有定义一个常量,那么就欲编译下面的代码 #ifdef是预编译指令,代表如果定义了一个常量,那么就欲编译下面的代码 #ifdef  宏 代码 #endif .c文件 放函数的定义 .h 文件 放函数的声明 多文件编译时,头文件的写法 #ifndef

64位系统使用Access 数据库文件的彻底解决方法

最近,有PDF.NET用户问我怎么在64位系统下无法访问Access数据库的问题,我第一反应是我怎么没有遇到呢?今天一看自己的VS和Office都是32位版本的,所以在VS里面调试访问Access是没有问题的,但是直接使用编译好的.NET程序访问Access,就出问题了,报: 未在本地计算机上注册“Microsoft.Jet.Oledb.4.0”提供程序. 于是,又在公司的电脑上(Win7 64位)做了实验,发现跟家里面的Win8.1 64位 问题一样,上网搜索了一下,大部分都建议将.NET程序

Android系统编译时遇到的几个.mk的疑惑。

在Android4.2的源码Build/prduct_config.mk里面遇到几个疑惑: # Convert a short name like "sooner" into the path to the product # file defining that product. # INTERNAL_PRODUCT := $(call resolve-short-product-name, $(TARGET_PRODUCT)) ifneq ($(current_product_ma

【C/S通信交互之Http篇】Cocos2dx(Client)使用Curl与Jetty(Server)实现手机网游Http通信框架(内含解决curl.h头文件找不到问题)

之前已经分享过一篇基于Cocos2dx与服务器使用Socket进行通信的框架,还不太熟悉的请移步到如下博文中: [C/S通信交互之Socket篇]Cocos2dx(Client)使用BSD Socket与Mina(Server)手机网游通信框架! 那么今天Himi来分享如何在cocos2dx中使用Http来访问Server端并且获取数据: 这里对于Server端,Himi选用,Jetty,对于Jetty不太熟悉的可以先自行baidu-google-是个servlet的容器.类似JSP. 什么是s

iOS开发中遇到的头文件找不到的问题解决办法

有时会遇到莫名其妙的明明有这个文件,但是就是显示头文件找不到~下面讲下我的解决办法~ 先找到这里Search Paths 喏~~这一行,双击他!! 弹出来个框框~修改成这个样子,回车!搞定了!再运行试试~头文件找的到了吧O(∩_∩)O~

qmake.exe是在Qt安装编译时生成的,里面内嵌了Qt相关的一些路径(最简单的方法是保持一样的安装路径,最方便的办法是设置qt.conf文件)

在网上直接下载别人编译好的Qt库,为自己使用省了不少事.但往往也会遇到些问题,其中Qt version is not properly installed,please run make installQt没有被正确安装,请运行make install这个问题是比较常见的一个.网上看了一个帖子,终于明白原因所在,原来是qmake.exe是在Qt安装编译时生成的,里面内嵌了Qt相关的一些路径.如果直接拷贝过来使用,自己的路径结构与原来不同,则Qt库就不能正常使用.提示就是Qt version is