在 autoconf 中首次指定库版本的正确方法是什么?该库处于不稳定状态,我想在它0.1.0为公共 API 准备好之前它应该是1.0.0. 所以我把以下内容configure.ac:
AC_SUBST([FOO_SO_VERSION], [0:1:0])
AC_SUBST([FOO_API_VERSION], [0.1.0])
Run Code Online (Sandbox Code Playgroud)
还有Makefile.am:
libfoo_la_LDFLAGS = -version-info $(FOO_SO_VERSION)
Run Code Online (Sandbox Code Playgroud)
虽然我得到了这个文件:
libfoo.so.0.0.1
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下配置构建 json-c:
./configure --target=arm-linux-androideabi --host=arm-linux-androideabi \
--build=x86_64-unknown-linux-gnu
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
cc1: error: command line option '-std=c++11' is valid for C++/ObjC++ but not for C [-Werror]
Run Code Online (Sandbox Code Playgroud)
我试图添加--disable-std-c++11和--disable-std-cpp11到配置,但我总是遇到同样的问题。
如何解决?
我有一个系统,可以创建5个可执行文件.所有可执行文件都是相同的程序,但它们都是指向同一文件的硬链接.我不知道如何用automake干净利落地做到这一点.有办法吗?我没有问题实际制作文件---但他们没有正确安装.我对如何设置它有点傻眼.
谢谢.
如何在 GNU automake 中转义程序名称?例如,以下工作:
lib_LTLIBRARIES = libc.la
libc_la_SOURCES = source.cc
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试在程序名称上使用符号“加号”(+),如下所示:
lib_LTLIBRARIES = libc++.la
libc++_la_SOURCES = source.cc
Run Code Online (Sandbox Code Playgroud)
Make 将回应:
make[1]: *** No rule to make target 'libc++.c', needed by 'libc++.lo'. Stop.
Run Code Online (Sandbox Code Playgroud)
似乎没有找到 SOURCES 变量。我尝试在加号前面加上美元 ($)、反斜杠 (\) 和双反斜杠 (\\),但没有成功。
我正在尝试在我的RHEL 5机器上编译google rpc(grpc),配置脚本检查并抛出此错误:
configure: error: sched_yield was not found on your system
Run Code Online (Sandbox Code Playgroud)
我检查了config.log文件,发现是这样的:
| /* Override any GCC internal prototype to avoid an error.
| Use char because int might match the return type of a GCC
| builtin and then its argument prototype would still apply. */
| #ifdef __cplusplus
| extern "C"
| #endif
| char sched_yield ();
| int
| main ()
| {
| return sched_yield ();
| ;
| return 0;
| }
configure:19729: result: …Run Code Online (Sandbox Code Playgroud) src/Makefile.am:
myproj_CXXFLAGS = -fopenmp -O3 -std=c++17 -g -I/home/software/miniconda3/include -I$(top_srcdir)/external
myproj_LDFLAGS = -L/home/software/miniconda3/lib -Wl,-rpath=/home/software/miniconda3/lib -fopenmp -lz -ligraph -pthread
bin_PROGRAMS = myproj
myproj_SOURCES = gfa.cpp graph.cpp myproj.cpp gfa.h graph.h
bindir = $(top_srcdir)/bin
Run Code Online (Sandbox Code Playgroud)
这很好地构建了目标文件,但是在构建目标时,它会尝试运行
g++ -fopenmp -O3 -std=c++17 -g -I/home/software/miniconda3/include -I../external -g -O2 -L/home/software/miniconda3/lib -Wl,-rpath=/home/software/miniconda3/lib -fopenmp -lz -ligraph -pthread -o myproj myproj-gfa.o myproj-graph.o myproj-komb.o
Run Code Online (Sandbox Code Playgroud)
这个问题是目标文件在库文件之后,这会导致错误
/home/software/miniconda3/lib/libz.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我可以通过-lz -ligraph在最后添加标志来轻松解决这个问题,但是我怎样才能让 automakeLDFLAGS在目标文件之后而不是之前添加呢?
另一个Autotools问题...我正在研究Fedora 27,并且正在尝试构建libidn和 libidn2。我需要configure; make; make install实际工作。我需要它工作的机器只有Autoconf,Automake,Autopoint,Libtool和编译器工具。他们没有别的东西,就像这样<something>2html,<something>2pdf所以我无法构建文档。我也不能autoreconf 按照手册运行,因为那也坏了。
我不知道为什么这些工具会尝试构建文档,因为我使用禁用了它们--disable-gtk-doc --disable-gtk-doc-html --disable-gtk-doc-pdf。我曾尝试使用HELP2MAN=true和解决它MAKEINFO=true,但是Autotools找到了另一种破解方法:
gmake[2]: Entering directory '/home/Build-Scripts/libidn-1.33/doc'
echo '# This file is automatically generated. DO NOT EDIT! -*- makefile -*-' > Makefile.gdoc
echo >> Makefile.gdoc
echo 'gdoc_TEXINFOS =' >> Makefile.gdoc
echo 'gdoc_MANS =' >> Makefile.gdoc
echo >> Makefile.gdoc
for file in ../lib/idna.c ../lib/nfkc.c ../lib/pr29.c ../lib/punycode.c ../lib/stringprep.c ../lib/tld.c ../lib/toutf8.c ../lib/version.c ../lib/idn-free.c ../lib/strerror-idna.c ../lib/strerror-pr29.c ../lib/strerror-punycode.c ../lib/strerror-stringprep.c …Run Code Online (Sandbox Code Playgroud)