我正在尝试使用TRI DDS示例代码。所有设置都是使用MSVS2012构建的,并附带MSVS2012项目/解决方案文件。
但是我想尝试使用Cygwin和g ++ / gcc来构建它。我已经到目前为止然后遇到了问题。
我的cpp / h文件取自他们的示例 - 用户代码是基本的c ++,但我认为生成的文件/ RTI DDS文件会导致问题。
基本源文件是:
Hello.cpp
HelloPublisher.cpp/h
HelloSubscriber.cpp/h
HelloWorld.idl
RTI-DDS生成器使用HelloWorld.idl
生成更多文件(.cxx / h文件)。我不希望更改任何RTI-DDS文件,并且4个源文件中的代码相当普通,所以如果我破解了对RTI-DDS的所有调用,我可以编译它们。
我想关注的领域是makefile / environment。以下是我的makefile的相关部分(注意,链接器部分不完整,因为我还没有那么远 - 编译仍然失败):
注意 NDDSHOME = c:\Program Files\rti_connext_dds-5.3.0
作为env var。
# Setup minimal "un-polluted" paths to try to avoid any conflicts
makePaths=/usr/local/bin:/usr/bin:$(NDDSHOME)/bin
export PATH := $(makePaths)
#Include Paths
INCLUDES = -I. -I"$(NDDSHOME)/include" -I"$(NDDSHOME)/include/ndds" -I"$(NDDSHOME)/include/ndds/hpp"
#Compiler / options:
DEFINES = -DRTI_WIN32 -DRTI_STATIC -DWIN32 -D_WIN32_WINNT=_WIN32_WINNT_WIN7
CC = g++
CC_FLAGS = -std=c++11 -Wall -Wextra -lWS2_32
EXEC = run
# C++ files
SOURCES = $(wildcard *.cpp)
OBJECTS = $(SOURCES.cpp=.o)
# Main Target
$(EXEC): $(OBJECTS)
# Don't do linking yet - compile not working!
%.o: %.cpp
$(CC) $< -o $@ -c $(DEFINES) $(CC_FLAGS) $(INCLUDES)
我知道INCLUDES路径正在运行,因为当它们没有时会得到不同的错误(找不到......)
但我现在得到的错误是:
/usr/include/w32api/winsock2.h:1004:68: error: conflicting declaration of c function 'int gethostname(char*, int)'
:
:
/usr/include/sys/unistd.h:268:6 note: previous declration 'int gethostname(char *, size_t)'
注意我必须从我的其他电脑手动复制这个...所以我缩写了完整的信息。
我认为我已经接近通过查看具有类似错误的其他问题来解决这个问题,但我无法完全解决此问题。我已经尝试添加其他定义来指定Windows版本,但是没有修复它。我知道有一个链接器选项我们需要用于mingw之类的东西,这是-lws2_32
标志的设置 - 但我还没有进入链接器阶段:(
我想unistd.h或winsock2.h不应该都包括在内,但是我不能弄清楚我需要添加什么定义(或其他)...
有什么想法吗?