【发布时间】:2015-01-17 07:42:35
【问题描述】:
我正在Ubuntu中用cmake编写一个C++程序,它使用/usr/include/linux中的头文件joystick.h。默认情况下,如果我使用#include <joystick.h>,make 似乎无法在默认目录中找到joystick.h。因此,我将include_directories (/usr/include/linux) 行添加到CMakeLists.txt 以启用此标头。
问题是,我现在遇到各种错误,例如 error: redefinition of ‘struct timeval’ 和 error: redefinition of ‘struct timezone’。这似乎是因为/user/include 和/usr/include/linux 中都有一个标题time.h。这些文件中的标头保护分别是#ifndef _TIME_H 和#ifndef _LINUX_TIME_H。因此,我能想到的唯一解决方案是在我的源代码中硬编码joystick.h 的路径。
因此,在我看来,由于这些重新定义问题,永远不应将 /usr/include/linux 添加到搜索路径中。它是否正确?我对路径进行硬编码的解决方案是最好的解决方案吗?
【问题讨论】:
-
文件中
time.h的标头保护是否不同? -
你不能只在文件中使用
#include <linux/joystick.h>吗? -
是的,这很有效,很简单!谢谢:)
-
@EtanReisner psst Karnivaurus 说您的评论在没有标记您的情况下有效。我敢打赌,如果你把它移到一个答案上,他/她会给你甜蜜的互联网积分。