Почему я получаю ошибки компоновщика при попытке скомпилировать мой первый сервер CORBA (используя реализацию ACE / TAO ORB)?

Пытаясь реализовать мой самый первый сервер CORBA (с реализацией ACE / TAO ORB), я использую следующий make-файл:

#compiler
CC=g++
#compiler options
CPPFLAGS=-Wall -I. -I/usr/include/ -I/usr/include/orbsvcs/
LFLAGS=-L/usr/lib64/ -lACE -lTAO -lTAO_PortableServer -lTAO_DynamicAny -lTAO_CosNotification -lTAO_CosNaming
#source files
SOURCES=$(wildcard *.cpp)
#object files
OBJECTS=$(SOURCES:.cpp=.o)

#executable filename
EXECUTABLE=main
#Special symbols used:
#$^ - is all the dependencies (in this case =$(OBJECTS) )
#$@ - is the result name (in this case =$(EXECUTABLE) )

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
#$(LINK.o) $^ -o $@
$(CC) $(LFLAGS) $^ -o $@

%.o: %.c
$(CC) $(CPPFLAGS) -c $<

clean:
- rm -rf $(EXECUTABLE) $(OBJECTS)

и я получаю следующую ошибку при компиляции:

g++  -Wall -I. -I/usr/include/ -I/usr/include/orbsvcs/  -c -o cryptC.o cryptC.cpp
g++  -Wall -I. -I/usr/include/ -I/usr/include/orbsvcs/  -c -o cryptS.o cryptS.cpp
g++  -Wall -I. -I/usr/include/ -I/usr/include/orbsvcs/  -c -o main.o main.cpp
In file included from main.cpp:5:
CryptographicImpl.h: In member function ‘virtual char* CryptographicImpl::decrypt(const CaesarAlgorithm::charsequence&, CORBA::ULong, CORBA::ULong)’:
CryptographicImpl.h:49: warning: comparison between signed and unsigned integer expressions
#g++   cryptC.o cryptS.o main.o -o main
g++ -L/usr/lib64/ -lTAO_PortableServer -lTAO_DynamicAny -lACE -lTAO -lTAO_CosNotification -lTAO_CosNaming cryptC.o cryptS.o main.o -o main
cryptC.o: In function `TAO::Objref_Traits<CaesarAlgorithm>::marshal(CaesarAlgorithm*, TAO_OutputCDR&)':
cryptC.cpp:(.text+0x7f): undefined reference to `CORBA::Object::marshal(CORBA::Object*, TAO_OutputCDR&)'

весь журнал компиляции: http://pastebin.com/0KpLXixw

Я использую ACE (6.2.8) и TAO (2.2.8) из это репо на моем CentOS 6,6

0

Решение

Порядок библиотек важен, справа налево вы должны сначала указать базовые библиотеки, чем те, которые используют базу, например -lTAO_PortableServer -lTAO_AnyTypeCode -lTAO -lACE -ldl -lrt, Для получения дополнительной информации см. Также Почему порядок, в котором связаны библиотеки, иногда вызывает ошибки в GCC?.

Я бы порекомендовал вам скомпилировать один из поставленных модульных тестов TAO и скопировать оттуда, или использовать MPC для генерации make-файлов.

Также проверьте TAOX11, новое сопоставление языков IDL для C ++ 11 намного проще в использовании, и мы предоставляем бесплатные оценочные лицензии, которые вы можете использовать для использования в классе.

1

Другие решения


По вопросам рекламы [email protected]