Получение среды Eclipse C++, работающей с Xalan
Я работал над созданием C++ IDE на моей 64-битной Windows 7-машине. Это расстраивает, в основном из-за несовместимости 32- и 64-битных программ, использующих Eclipse IDE для разработчиков на C/C++
Ну, наконец-то я получил компиляцию HelloWorld, теперь я хочу добавить Xalan в свой проект. Я скачал как исходный код, так и двоичные файлы. Получение исходного кода для компиляции в MinGW (мой любимый компилятор) было невозможно, но я работаю над использованием.lib-файлов в двоичном каталоге, таком как xerces-c_2.lib. Могу ли я просто связать их с моим проектом C++, и если да, то как мне это сделать?
Спасибо!
РЕДАКТИРОВАТЬ ОБНОВЛЕНИЕ 2011-08-30
Мне просто не повезло, но я хотел опубликовать обновление. Я попытался построить это за пределами Затмения без успеха. Я пытаюсь создать пример StreamTransform.cpp, который поставляется в комплекте с Xalan-C. Он находится в каталоге со связанным заголовочным файлом: XalanMemoryManagerImpl.hpp
Затем я создал следующий Makefile:
OBJS = StreamTransform.o
CC = g++
DEBU \G = -g
CFLAGS = -Wall -c $(DEBUG)
LFLAGS = -Wall $(DEBUG)
LIBDIR = -LC:\Development\xslTests\stream\lib
LIBS = -lxerces-c_2 -lxerces-depdom_2 -lXalan-C_1
INCDIR = -IC:\Libs\xerces-c-windows_2000-msvc_60\include -IC:\Libs\Xalan-C_1_10_0-win32-msvc_60\include
all: transformer
transformer: $(OBJS)
$(CC) $(LFLAGS) $(OBJS) -o transformer $(LIBDIR) $(LIBS)
StreamTransform.o : StreamTransform.cpp XalanMemoryManagerImpl.hpp
$(CC) $(INCDIR) $(CFLAGS) StreamTransform.cpp
Базовая цель StreamTransform.o успешно выполняется, и выходной файл генерируется, но преобразователь умирает. Ошибка, которую я получаю, та же самая, что и в Eclipse. Куча " неопределенных ошибок ссылок:
C: \ Users \ x_walia \ workspace \ TCXMLTransformer \ Debug /../ StreamTransform.cpp: 115: неопределенная ссылка на `xalanc_1_10:: XSLTInputSource:: XSLTInputSource (std:: istream *, xercesc_2_7:: MemoryManager &) '
StreamTransform.o: в функции
main': C:/Libs/Xalan-C_1_10_0-win32-msvc_60/include/xalanc/XSLT/XSLTResultTarget.hpp:103: undefined reference to
xalanc_1_10::XalanMemMgrs::getDefaultXercesMemMgr()"
Для меня это выглядит как ошибка компоновки библиотеки, но что? Я не должен, что есть шесть.lib файлов, связанных с бинарным дистрибутивом Windows, который я использую. Половина из них имеет суффикс: _d, как в xerces-c_2 * d *, которые представляют библиотеки отладки. Я пытался как включить, так и опустить их, но безрезультатно.
Я слышал, что этот проект заброшен, и мне интересно, возникают ли у меня проблемы, потому что я компилирую на 64-битной машине Windows 7...
2 ответа
Вы не можете связать библиотеку C++, созданную с помощью Microsoft Visual C++, с объектами или библиотеками, созданными с помощью mingw. ABI не совместим.
Моя предпочитаемая поисковая система не дает никаких ссылок на существующие двоичные файлы Xalan/Xerces mingw, поэтому вам, вероятно, придется создавать их самостоятельно.
Вероятно, это вызвано ошибкой XALANC-643, которая была исправлена этим коммитом. Ошибка возникает при компиляции Xalan-C в среде, где был включен флаг компоновщика --as-required. Вы можете использовать более свежую версию или исправить ее вручную, переместив библиотеки в конец команды link. Используя src/xalanc/Utils/MsgCreator/Makefile.in в качестве примера:
До:
${EXTRA_LINK_OPTIONS} $(LIBS) $(XERCES_LIB) $^ -o $@ $(LOC_OTHER_LINK_PARAMETERS)
После:
${EXTRA_LINK_OPTIONS} $(LIBS) $^ -o $@ $(XERCES_LIB) $(LOC_OTHER_LINK_PARAMETERS)