假设我们有两个头文件:/directory1/A.hpp和directory2/A.hpp.这两个标题的内容是不同的!
我们的构建目标A.cpp需要directory1和directory2包含路径,因为两个目录中还有其他所需的头文件.
现在,A.cpp有一个#include "A.hpp"声明.
A.hpp预处理器选择哪个版本?
如果一个人使用第三方软件,那么这种情况可能会发生吗?
所以我试图在我的Mac上使用家里的c ++ 2011正则表达式.我正在使用Eclipse进行编码,稍微涉及到终端的编译.
当我尝试编译代码时会发生这种情况:
$ c++ -std=c++11 -o a *.cpp
scanner.cpp:11:10: fatal error: 'regex' file not found
#include <regex> // to use this need to use -std=c++11 flag in compiler
^
1 error generated.
Run Code Online (Sandbox Code Playgroud)
如果我使用-std = c ++ 11标志,则会发生这种情况.
这是我的c ++ -v:
$ c++ -v
Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.4.0
Thread model: posix
Run Code Online (Sandbox Code Playgroud)
现在我在我的计算机上找到了我希望在"usr/lib/c ++/v1/regex"项目中包含的文件.但这不是eclipse中的include文件,我不知道如何让我的编译器找到它.
如何才能将其添加到包含路径中,如果这是我需要做的工作呢?
更新:
试着
$ c++ -I/usr/lib/c++/v1 -o a *.cpp
Run Code Online (Sandbox Code Playgroud)
这会导致错误
Undefined symbols for architecture x86_64:
Run Code Online (Sandbox Code Playgroud)
跟着似乎是我的代码中每一行的引用,例如
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> …Run Code Online (Sandbox Code Playgroud) 我的命令:
/usr/bin/c++ -fPIC -I/Users/me/project/include -I/usr/local/include/opencv \
-I/usr/local/include -I/opt/local/include -std=c++11 -O3 -M -c \
/Users/me/project/src/program.cpp | grep opencv
Run Code Online (Sandbox Code Playgroud)
program.cpp有:
#include "opencv2/core/core.hpp"
#include "opencv2/ml/ml.hpp"
Run Code Online (Sandbox Code Playgroud)
输出:
/opt/local/include/opencv2/core/core.hpp \
/opt/local/include/opencv2/core/types_c.h /usr/include/assert.h \
/usr/include/math.h /opt/local/include/opencv2/core/version.hpp \
/opt/local/include/opencv2/core/operations.hpp \
/opt/local/include/opencv2/core/mat.hpp \
/opt/local/include/opencv2/objdetect/objdetect.hpp \
/opt/local/include/opencv2/ml/ml.hpp \
Run Code Online (Sandbox Code Playgroud)
然而,存在:/usr/local/include/opencv2/core/core.hpp、 和/usr/local/include/opencv2/ml/ml.hpp。
使用该-v标志, clang 告诉我:
ignoring duplicate directory "/usr/local/include"
as it is a non-system directory that duplicates a system directory
#include "..." search starts here:
#include <...> search starts here:
/Users/me/project/include
/usr/local/include/opencv
/opt/local/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1 …Run Code Online (Sandbox Code Playgroud) 使用嵌入式 C 项目。有库,包含文件等 - 用于微控制器。我不需要为主机和操作系统(Linux Mint 64 位)使用 GCC。按照惯例...
但是现在我正在尝试从 Github编译mspdebug项目——当然是使用 GCC。我在 make 一开始就收到一个错误:
mspdebug$ make
cc -DUSE_READLINE -O1 -Wall -Wno-char-subscripts -ggdb -I. -Isimio -Iformats -Itransport -Idrivers -Iutil -Iui -DLIB_DIR=\"/usr/local/lib/\" -o util/btree.o -c util/btree.c
util/btree.c:19:20: fatal error: assert.h: No such file or directory
#include <assert.h>
^
compilation terminated.
Run Code Online (Sandbox Code Playgroud)
我在所有可能的路径中搜索包含(我通过 gcc -v 命令获得了它们的列表) - 没有 assert.h 文件,以及 stdio.h 等等。除了虚拟框目录只有一个地方(GCC 不搜索包含的地方):/usr/lib/syslinux/com32/include
AFAIK,所有标准库和包含都与 GCC 一起安装。所以我尝试重新安装 GCC (4.8.4) - 没有任何变化。
为 GCC 提供所需的所有标准环境的正常方法是什么?
假设我有一个目录结构如下的项目:
myproject
??? .git [...]
??? CMakeLists.txt
??? src
??? CMakeLists.txt
??? foo.cc
??? foo.h
Run Code Online (Sandbox Code Playgroud)
如果在src/foo.cc我包含头文件#include "foo.h",然后在其上运行 Google 的cpplint.py,它会抱怨
src/foo.cc:8: Include the directory when naming .h files [build/include] [4]
Run Code Online (Sandbox Code Playgroud)
所以我把它作为#include "./foo.h". 现在我收到另一个投诉:
src/foo.cc:8: src/foo.cc should include its header file src/foo.h [build/include] [5]
Run Code Online (Sandbox Code Playgroud)
但是,如果我将它包含为#include "src/foo.h",编译器将找不到它,因为我当前的 CMake 设置。这是我的两个 CMakeLists.txt 文件的样子:
CMakeLists.txt:
project(myproject)
add_subdirectory(src)
Run Code Online (Sandbox Code Playgroud)
源代码/CMakeLists.txt:
set(SRCS foo.cc)
add_executable(foo ${SRCS})
Run Code Online (Sandbox Code Playgroud)
我使用 CMake 的方式在某种程度上从根本上是错误的吗?我应该src/CMakeLists.txt完全删除文件,并使用CMakeLists.txt完整路径指定基础中的所有源文件吗?
或者我应该简单地忽略 cpplint 的抱怨,因为它们并不真正适合 CMake 项目的设置方式?
在C 预处理器版本 10.0.1的第 8 页中,我们有以下声明:
\n\n\n\n\n\n\n
#include "file"此变体用于您自己的程序的头文件。
\nfile它首先在包含当前文件的目录中搜索名为的文件,然后在引用目录中搜索,然后在用于<file>. 您可以使用该选项将目录添加到\n 引用目录列表中\xe2\x80\x98-iquote\xe2\x80\x99。
“然后在报价目录中”是什么意思?
\n我正在尝试用 C 做一个项目,但我的字符串有问题#include<stdio.h>,我尝试了几个教程,但没有一个起作用,我的代码:
#include <stdio.h>
int main () {
int age;
printf ("Enter age:");
scanf ("% d", age);
printf ("age is% d", age);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题有2:
遇到#include 错误。更新包含路径。
无法打开源文件错误代码“stdio.h”。
对于这个项目,我创建了一个文件夹,其中有一个名为 .dist 的文件夹和我的 Main.c 文件
(为了更清楚我附上了图片)
谁能告诉我如何解决这个问题?
我遇到了一个奇怪的问题,linux c ++编译器包含来自本地目录而不是系统目录的文件.请参阅带有(-H)选项的预编译器输出.可以看出系统文件/usr/include/sched.h突然包含来自本地目录的time.h头而不是系统一.我假设如果包含文件在<>括号内,系统目录应首先查找,
来自sched.h的相关行是: -
Run Code Online (Sandbox Code Playgroud)#include <time.h>
带(-H)选项的编译器输出: -
..... /usr/include/c++/4.6/bits/basic_string.h
...... /usr/include/c++/4.6/ext/atomicity.h
....... /usr/include/c++/4.6/i686-linux-gnu/./bits/gthr.h
........ /usr/include/c++/4.6/i686-linux-gnu/./bits/gthr-default.h
......... /usr/include/pthread.h
.......... /usr/include/sched.h
........... /usr/lib/gcc/i686-linux-gnu/4.6.1/include/stddef.h
........... /home/borisu/ivrworx-lnx/src/iw_core/../kentcsp/src/time.h <<<< WHY ???
Run Code Online (Sandbox Code Playgroud)
编译器目录搜索
$ gcc -xc++ -E -v -
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6.1/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.1-9ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++,go --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu …Run Code Online (Sandbox Code Playgroud) <%String path = application.getRealPath("/");%>
<%@page import="index.css" %>
Run Code Online (Sandbox Code Playgroud)
我正在使用上面的String路径来获取我的目录的真实路径.我想从css文件夹导入index.css.
在JSP中是否可以执行类似的操作<%@page import = path+"css/index.css"%>或者是否有更简单的方法来执行此操作?