LINUX.ORG.RU

autoconf, проблемы


0

0

Здравствуйте.

Разбираюсь с autoconf, появились вопросы-проблемы.

1) как грамотно добавить xerces-c в макрос AC_CHECK_HEADER?
добавляю так:

...

AC_PROG_CXX
AC_CHECK_HEADERS(xercesc/util/PlatformUtils.hpp,[],[
echo "Could not find xerces-c include files. Please, check if xerces-c-devel installed on your system"
exit 1
])

...

оно ругается на меня такими словами:


checking xercesc/util/PlatformUtils.hpp usability... no
checking xercesc/util/PlatformUtils.hpp presence... yes
configure: WARNING: xercesc/util/PlatformUtils.hpp: present but cannot be compiled
configure: WARNING: xercesc/util/PlatformUtils.hpp: check for missing prerequisite headers?
configure: WARNING: xercesc/util/PlatformUtils.hpp: see the Autoconf documentation
configure: WARNING: xercesc/util/PlatformUtils.hpp: section "Present But Cannot Be Compiled"
configure: WARNING: xercesc/util/PlatformUtils.hpp: proceeding with the preprocessor's result
configure: WARNING: xercesc/util/PlatformUtils.hpp: in the future, the compiler will take precedence
configure: WARNING: ## ------------------------------------- ##
configure: WARNING: ## Report this to mua@g.c ##
configure: WARNING: ## ------------------------------------- ##
checking for xercesc/util/PlatformUtils.hpp... yes


как я понял из мануала, проблема в том, что configure считает, что не может скомпилить файл с этим инклюдом и предлагает проверить, все ли дополнительные инклюды на месте. Однако, код

#include <xercesc/util/PlatformUtils.hpp>

int main() {
return 0;
}

$ g++ 1.cpp -o 1

компилируется верно.

Вопрос - ЧЯДНТ?



2) Проблема тоже с xerces-c, но тут я мож синтаксиса не понял..

Код

#include <xercesc/util/PlatformUtils.hpp>
// Other include files, declarations, and non-Xerces-C++ initializations.
XERCES_CPP_NAMESPACE_USE

int main(int argc, char* argv[])
{
try {
XMLPlatformUtils::Initialize();
}
catch (const XMLException& toCatch) {
// Do your failure processing here
return 1;
}

// Do your actual work with Xerces-C++ here.

XMLPlatformUtils::Terminate();

// Other terminations and cleanup.
return 0;
}

$ g++ 1.cpp -lxerces-c -o 1

компилируется и собирается отлично. Как верно проверить с помощью AC_CHECK_LIB(xerces-c,XMLPlatformUtils::Initialize) наличие библиотеки?


Поможите кто чем может, пжл.

★★★★★

Из qpidc/configure.ac:

AC_CHECK_LIB([xerces-c], [_init], , [use_xml=no])

AC_CHECK_HEADER([xercesc/framework/MemBufInputSource.hpp], , [use_xml=no])

mv ★★★★★
()
Ответ на: комментарий от mv

Спасибо.

AC_CHECK_LIB([xerces-c], [_init], , [exit 1]) - работает отлично,

a

AC_CHECK_HEADER([xercesc/framework/MemBufInputSource.hpp], , [use_xml=no])

всё так же выдает варнинги, как и прежняя строка..

в общем и целом программа вроде собирается, но вопрос с варнингами остаётся открытым.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от AndreyKl

AC_LANG([C++]) добавь. Тестовый исходник при AC_CHECK_HEADER пытается собраться при помощи gcc, который про namespace ничего не знает.

mv ★★★★★
()
Ответ на: комментарий от mv

спасибо. видел в доке ссылку Language Choice но почему-то решил что по ней ходить не надо, как выяснилось - зря..

спасибо, всё работает, тему можно считать закрытой.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от AndreyKl

На деле оказывается полезным учить autotools, глядя в исходники большого проекта, который их использует. Autobook это, конечно, не отменяет.

mv ★★★★★
()
Ответ на: комментарий от AndreyKl

> AC_CHECK_LIB([xerces-c], [_init], , [exit 1]) - работает отлично,

Некультурно так делать. Я exit 1 имею в виду.

AC_CHECK_LIB([xerces-c], [_init], ,
[AC_MSG_ERROR([libxerces-c can not be found])])

А в Вашем варианте configure тупо обламывается, оставляя пользователя
гадать, в чем же дело.


Dselect ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.