Rozdzielczość biblioteki z autoconf?
Buduję swój pierwszy pakiet autoconf managed.
Jednak nie mogę znaleźć żadnych prostych przykładów, jak określić wymaganą bibliotekę i znaleźć tę bibliotekę, gdzie może być w różnych miejscach.
Aktualnie mam:
AC_CHECK_LIB(['event'], ['event_init'])
Ale:
- nie znajduje wersji zainstalowanej w
/opt/local/lib
- nie skarży się, jeśli biblioteka nie zostanie znaleziona
- muszę też ustawić ścieżkę include na
/opt/local/include
Każda pomoc, lub linki do przyzwoitych samouczków bardzo cenione...
6 answers
Musisz ręcznie ustawić CFLAGS
, CXXFLAGS
i LDFLAGS
Jeśli chcesz, aby gcc / g++ szukał w niestandardowych lokalizacjach.
Więc, zanim zadzwonisz AC_CHECK_LIB()
, Zrób coś w rodzaju
CFLAGS="$CFLAGS -I/opt/local/include"
CXXFLAGS="$CXXFLAGS -I/opt/local/include"
LDFLAGS="$LDFLAGS -L/opt/local/lib"
Nie potrzebujesz CXXFLAGS, jeśli używasz tylko gcc w całym skrypcie configure.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-05 20:59:53
Skrypt Autoconf nie może odgadnąć "opcjonalnych" lokalizacji bibliotek, które mogą się różnić w zależności od platformy. Więc możesz powiedzieć
CPPFLAGS="-I/opt/local/include" LDFLAGS="-L/opt/local/lib" ./configure
Dla AC_CHECK_LIB()
Musisz podać warunek fail jawnie w argumencie "action-if-false":
dnl This is simply print "no" and continue:
AC_CHECK_LIB([m], [sqrt123])
dnl This will stop:
AC_CHECK_LIB([m], [sqrt123], [], [AC_MSG_ERROR([sqrt123 was not found in libm])])
Wyjście:
checking for sqrt123 in -lm... no
checking for sqrt123 in -lm... no
configure: error: sqrt123 was not found in libm
AC_CHECK_LIB()
domyślnie nie zawodzi z oczywistych powodów: można sprawdzić kilka różnych bibliotek, które zapewniają podobną funkcjonalność i wybrać jedną z nich:) {]}
Zobacz też ten post dla podobny temat.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:00
Jeśli Biblioteka wysyła a .plik pc, rozważ użycie makra PKG_CHECK_MODULES (), które robi to, co chcesz. Jeśli to twoja własna biblioteka, po prostu wyślij .plik pc do /usr / lib / pkgconfig, znacznie ułatwi innym programistom zależenie/używanie go.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-05 21:28:36
Wiem, że to już stary wątek, ale to może niektórym pomóc. W ten sposób znajduję pewne rzeczy.
hdff="no"
hdffprefix="ERROR"
AC_ARG_WITH(hdf,[ --with-hdf Compile with hdf library, for output.],[hdffprefix=$withval hdff="yes"],[])
# if there is no value given, it appears tha hdffprefix is set to "yes"
if test $hdffprefix = "yes" -a $hdff = "yes"
then
echo "HDF: Attempting to find HDF"
hdffprefix="ERROR"
# check if hdffprefix is set, if it is not, it sets it to "ERROR" and the
# 'if' comparison evaluates to true
if [[ "$hdffprefix" == "ERROR" ]]
then
echo "HDF: hdffprefix not set, searching PATH"
for i in `echo $PATH | tr ':' '\n'`
do
if [[ $i == *hdf* ]]
then
if [[ $i == *bin/* ]]
then
hdffprefix=${i%bin/}
# if it doesn't exist, re-set to ERROR
if [[ ! -f ${hdffprefix}include/hdf.h ]]
then
hdffprefix="ERROR"
fi
elif [[ $i == *bin* ]]
then
hdffprefix=${i%bin}
# if it doesn't exist, re-set to ERROR
if [[ ! -f ${hdffprefix}include/hdf.h ]]
then
hdffprefix="ERROR"
fi
fi
fi
done
if [[ "$hdffprefix" == "ERROR" ]]
then
echo "HDF: hdffprefix not found in PATH, trying 'which'"
WHICH_TEST_HDF=`which hdf2gif`
if [[ WHICH_TEST_HDF != "" ]]
then
hdffprefix=${WHICH_TEST_HDF%bin/hdf2gif}
else
echo "HDF: Warning - hdf not found"
fi
fi
fi
if [[ "$hdffprefix" != "ERROR" ]]
then
hdff="yes"
echo "HDF found: $hdffprefix"
fi
fi
if test $hdff = 'yes'; then
hdfincs=" -DUSE_HDF -I"${hdffprefix}"include"
scriptotherlibsinc=${scriptotherlibsinc}" -L"${hdffprefix}"/lib"
scriptotherlibs=${scriptotherlibs}" -lmfhdf -ldf -ljpeg -lz"
AC_CHECK_HEADERS([${hdffprefix}/include/hdf.h],,[AC_MSG_ERROR([Cannot find hdf.h])])
AC_CHECK_HEADERS([${hdffprefix}/include/mfhdf.h],,[AC_MSG_ERROR([Cannot find mfhdf.h])])
fi
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-03 16:29:36
Więc chcesz skonfigurować autoconf, aby znaleźć te katalogi automatycznie i codelogic daje odpowiedź; ale załóżmy, że nie chcesz szukać tam na wszystkich systemach, tylko na komputerze mac. Możesz dodać następujące
AC_CANONICAL_HOST
case $host_os in
darwin* )
CFLAGS="$CFLAGS -I/opt/local/include"
CXXFLAGS="$CXXFLAGS -I/opt/local/include"
LDFLAGS="$LDFLAGS -L/opt/local/lib"
;;
esac
Zauważ, że dodałem go jako drzewo przypadków, abyś mógł później dodawać rzeczy dla różnych systemów operacyjnych( takich jak linux * i BSD ).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-18 11:58:41
W tej sytuacji standardowym sposobem jest posiadanie zmiennej środowiskowej CPLUS_INCLUDE_PATH
ze ścieżką nieoficjalnych zawiera pliki i LIBRARY_PATH
dla bibliotek. Przypomnij, że nie musisz niczego zmieniać w configure.ac. więc możesz po prostu wywołać konfigurację w ten sposób:
$ export CPLUS_INCLUDE_PATH=/opt/local/include
$ export LIBRARY_PATH=/opt/local/lib
$ ./configure
Uwaga dotycząca przenośności: chociaż będzie to działać na wielu współczesnych kompilatorach, nie wszystkie Kompilatory będą respektować te zmienne. Niektóre Kompilatory krzyżowe będą je ignorować lub nadpisywać, co zmusza do uciekania się do modyfikacji CFLAGS
i LDFLAGS
, Jak wspomniano w innych odpowiedziach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-24 01:13:40