【问题标题】:omniorb makefile server erroromn​​iorb makefile 服务器错误
【发布时间】:2016-05-25 01:07:29
【问题描述】:

我在omniorb 4.2 上做了一些简单的程序,但是服务器的makefile 给了我一个错误。 这是我的 makeserver 文件代码:

CC            = gcc
CPPFLAGS      = -g -c
LDFLAGS       = -g
OMNI_HOME     = /opt/omniorb
OMNI_INCLUDES = -I$(OMNI_HOME)/include
OMNI_LIB_DIR  = $(OMNI_HOME)/lib
OMNIIDL       = $(OMNI_HOME)/bin/omniidl
INCLUDES      = $(OMNI_INCLUDES)
LIBS          = -lomniORB4 -lomnithread -lomniDynamic4
OBJECTS       = Data.o CServiceA.o Server.o

all Server: $(OBJECTS)
    $(CC) $(LDFLAGS) -o Server -L$(OMNI_HOME)/lib $(OBJECTS)         $(LIBPATH) $(LIBS)

Data.o: DataSK.cc Data.hh
    $(CC) $(CPPFLAGS) $(INCLUDES) DataSK.cc

Server.o: Server.cpp Data.hh
    $(CC) $(CPPFLAGS) $(INCLUDES) Server.cpp

CServiceA.o: CServiceA.cpp CServiceA.h Data.hh
    $(CC) $(CPPFLAGS) $(INCLUDES) CServiceA.cpp

DataSK.cc: Data.idl
    $(OMNI_HOME)/bin/omniidl -bcxx Data.idl

clean clean_all:
    rm -fr *.o
    rm -fr core
    rm -fr *.hh
    rm -fr *SK.cc
    rm -fr Server

这是它给我的错误:

$ make -f MakeServer 
gcc -g -c -I/opt/omniorb/include DataSK.cc
gcc -g -c -I/opt/omniorb/include CServiceA.cpp
gcc -g -c -I/opt/omniorb/include Server.cpp
gcc -g -o Server -L/opt/omniorb/lib Data.o CServiceA.o Server.o  -        lomniORB4 -lomnithread -lomniDynamic4
gcc: error: Data.o: file or directory doesn't exist
MakeServer:13: fail in instructions for objective 'all'
make: *** [all] Error 1

【问题讨论】:

    标签: c++ ubuntu makefile


    【解决方案1】:

    以下规则被破坏

    Data.o: DataSK.cc Data.hh
        $(CC) $(CPPFLAGS) $(INCLUDES) DataSK.cc
    

    你告诉过 make 这条规则创建了Data.o,但它实际上创建了DataSK.o,所以更改规则和OBJECTS

    OBJECTS       = DataSK.o CServiceA.o Server.o
    
    DataSK.o: DataSK.cc DataSK.hh
        $(CC) $(CPPFLAGS) $(INCLUDES) DataSK.cc
    

    作为旁注,你的很多makefile是不必要的,内置规则和gcc依赖生成可以覆盖大部分工作:

    omni_home := /opt/omniorb
    
    CPPFLAGS := -I$(omni_home)/include -MMD -MP
    CXXFLAGS := -g
    LDFLAGS  := -L$(omni_home)/lib
    LDLIBS   := -lomniORB4 -lomnithread -lomniDynamic4
    
    objs := DataSK.o CServiceA.o Server.o
    deps := $(objs:.o=.d)
    
    .PHONY: all clean
    
    all: Server
    
    Server: CC := g++
    Server: $(objs)
    
    DataSK.o: DataSK.cc
    DataSK.cc DataSK.hh: Data.idl
        $(omni_home)/bin/omniidl -bcxx $<
    
    clean: ; $(RM) $(objs) $(deps) DataSK.cc DataSK.hh Server
    
    -include $(deps)
    

    (由于我没有测试,以上可能无法正常工作。)

    【讨论】:

    • 嗯,这毕竟是问题所在。现在我在运行服务器时遇到了另一个问题。我启动了omniNames,但是尝试运行服务器给了我一个corba::system exception,我忘记了,你的代码比我的好,我也用于客户端。没有 2 个点效果很好。我有一个问题,.d 文件的用途是什么?这是错误。/服务器给我:$ ./Server 'IOR:010000001600000049444c3a446174612f53657276696365413a312 e30000000010000000000000064000000010102000c0000003139322e3 136382e312e3500b9e3000...' Caught CORBA::SystemException.
    • 我无法为您提供这么多信息的例外情况,请尝试开始一个新问题,因为它与这个问题无关。 .d 文件是 GCC 生成的 makefile 片段,用于存储依赖项,因此您不必编写 CServiceA.o: DataSK.hh 之类的内容,如果您好奇,请尝试阅读。
    • 哦...好的。我会试试的,谢谢你帮助我。好了,问题解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    相关资源
    最近更新 更多