- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我尝试了 this answer 中的建议,但它是针对 GCC 的,无论如何都没有帮助。
我要#include <thread>
在一个文件中,所以我有一个 make 文件如下:
OBJS = clitest.o Sources/NClient.o
CC = g++
DEBUG = -g
CFLAGS = -Wall -c $(DEBUG)
LFLAGS = -Wall $(DEBUG)
clitest: $(OBJS)
$(CC) $(LFLAGS) $(OBJS) -o clitest
我应该在哪里包含 -std=c++11
和 -lpthread
在这个?我已经尝试了几乎所有可能的组合,但是当我运行 make
时仍然出现此错误:
/usr/include/c++/4.8.3/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
我相信这是它正在运行的命令?
[jaska@localhost NClient]make
g++ -c -o clitest.o clitest.cpp
这里也是源代码文件:
#include <thread>
#include <string>
void task(std::string msg){
std::cout << msg << '\n';
}
...
...
std::thread t1(task, "message");
client->create();
t1.join();
最佳答案
您的 makefile 没有明确的规则来编译 $(OBJS)
中的对象,因此这意味着将使用隐式规则,这就是产生此命令的原因:
g++ -c -o clitest.o clitest.cpp
将 .cpp
文件转换为 .o
文件的隐式规则大约是:
$(CXX) $(CXXFLAGS) -c -o $@ $<
所以要添加影响该规则的选项,您应该将它们添加到 CXXFLAGS
变量(CFLAGS
通常用于编译 C 文件,而 CC
是C编译器,C++编译器的约定变量是CXX
)。
-lpthread
选项是链接器选项,因此需要在链接期间给出。您已经定义了自己的链接规则,因此您应该将 -lpthread
添加到该配方或将其添加到 LFLAGS
变量。
注意在链接期间使用 -Wall
和 -g
是无用的,它们没有任何效果。
注意在CFLAGS
中添加-c
是错误的,编译.c
文件的隐式规则已经包含了-c
,正如 C++ 文件的隐式包含 -c
。这不会导致任何问题,因为 CFLAGS
变量未被您的 makefile 使用,也未被编译 .cpp
文件的隐式规则使用。
注意而不是链接到 -lpthread
你应该编译 and 链接 -pthread
注意链接的隐式规则和 makefile 约定是使用变量 LDFLAGS
作为链接器选项,使用 LIBS
作为库,例如 -lpthread
,所以我会将您的 makefile 重写为:
OBJS = clitest.o Sources/NClient.o
CXX = g++
DEBUG = -g
CXXFLAGS = -Wall $(DEBUG) -std=c++11 -pthread
LDFLAGS = -pthread
clitest: $(OBJS)
$(CXX) $(LDFLAGS) -o $@ $^ $(LIBS)
这仍然依赖于将 .cpp
文件转换为 .o
文件的隐式规则,但现在该隐式规则将从 中选择正确的选项>CXXFLAGS
变量。
关于c++ - 如何在 makefile 中包含 -std=c++11 和 -lpthread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33689044/
我正在尝试交叉编译 samba 服务器。 ./config 工作得很好,但是当我想用 make 构建时,提示说: Linking shared library bin/libsmbclient.so.
我是 C 编程新手。 我试图使用 pthread API 编写一些并发程序。 我为 C/C++ 开发人员下载了 eclipse IDE,MinGW。我已经把所有的库,头文件放到了MinGW文件的相应位
所以我的问题是:为什么在编译命令末尾需要“-lpthread”? 为什么这个命令有效: gcc -o name name.c -lpthread 但这不会: gcc -o name name.c 我在
#include #include #include #include #define NB_THREAD 2 void *func(void *arg){ printf("t
我在 Windows 7 上使用带有 CDT 和 MinGW 的 Eclipse。我写了一个简单的程序,但它没有运行。 最佳答案 A.首先,确保包含路径为 Eclipse 所知。 以下说明详见http
我的系统中安装了 ubuntu 11。我有一个使用 pthread 库的 c 程序。我收到错误 Undefined reference to sem_wait() 即使我使用标志 -lpthread
这answer建议 -pthread 优于 -lpthread 因为预定义宏。 根据经验,-pthread 只给我一个额外的宏:#define _REENTRANT 1并且它似乎还强制将 libpth
在 8 个处理器上运行我的代码时遇到段错误,但它在 1 和 4 个处理器上运行良好。 我正在使用 lpthread 库,这是我在每个线程中执行的函数。如果需要更多代码,我可以添加更多代码。 v
也许这是个愚蠢的问题,但我有一个程序需要 -lmysqlcppconn -lreadline 和 -lpthread。 我正在使用 cmake 生成我决定使用的 makefile: set(CMAKE
我正在尝试使用 CMake 来编译我的项目。我依赖于 pthread 库。 在我的 CMakeFile 上,我尝试了很多不同的选项 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS
我正在尝试在 Mac 10.9.1 上编译程序,但遇到了问题。在运行带有 -lpthread 标志的 gcc 命令以创建 dylib 时,链接失败并出现以下错误。 ld : library not f
我正在编译一个程序,该程序包含来自 pthread 库的互斥信号量,但是当我使用 -lpthread 标志进行编译时,我收到 undefined reference 错误。 gcc -lpthread
我有一个服务器,它只在我执行 gcc server.c -o server -lpthread 时编译,但我的 makefile 是作为 gcc -lpthread server.c -o serve
这是我目前的问题。现在我正在尝试将基于 x86 的项目移植到 android。但该项目需要pthread库支持,无法通过配置阶段。 命令: ./configure --build=${BUILD_SY
这些天我在玩线程库并尝试实现一些功能。其中一个教程说要运行程序使用: gcc -lpthread -lrt -lc -lm project1.c scheduler.c -o out 首先我需要深入了
编译多线程程序时使用的gcc -pthread和gcc -lpthread有什么区别? 最佳答案 -pthread 告诉编译器链接 pthread 库并配置线程的编译。 例如,以下显示了在我的 Ubu
因此,我设计了一个服务器来实时接受多个客户端,其中客户端将“说话”,服务器将“重复”它。客户将一直保持活跃状态,直到我退出为止。我尝试使用 -lpthread 实现此目的,但服务器将接受所有客户端
这个问题在这里已经有了答案: Difference between -pthread and -lpthread while compiling (3 个答案) 关闭 4 年前。 我想利用 pthr
我正在为我的项目使用 Code::Blocks IDE。 到目前为止,我下载了 sqlite3 合并文件,使用 make install 安装它们并将 libsqlite3.a 库链接到我的项目pro
我对 C 中的 Makefile 还很陌生。我想弄清楚我应该把 -lpthread 放在我的 makefile 中的什么地方,这样我就可以在我的 C 程序中实现 posix 线程。下面是我的 Make
我是一名优秀的程序员,十分优秀!