Macos 构建共享库,用c+编写+;,在Mac/OS X上使用gnu自动工具? 我想把一个C++程序从Linux写入到MAC,包括共享库项目。我用gnu汽车制造公司来做制造工作。现在我有很多问题阻止我使用automake在mac上构建我的程序
我所做的努力:Macos 构建共享库,用c+编写+;,在Mac/OS X上使用gnu自动工具? 我想把一个C++程序从Linux写入到MAC,包括共享库项目。我用gnu汽车制造公司来做制造工作。现在我有很多问题阻止我使用automake在mac上构建我的程序,macos,autotools,automake,Macos,Autotools,Automake,我所做的努力: 安装了xcode 5.1.1及其命令行工具(看起来没有帮助,它没有automake) 通过自制程序手动安装automake libtool 遵循典型的自动生成工作流:autoscan、autoconf、aclocal、automake、configure、make。。。然后出现了一系列错误 在google heaps中搜索,没有找到关于此特定任务的完整教程 以下是我可以描述的一些问题: 第一件事是让共享库被构建。我在mac上发现libtool的名称是“glibtool”,所以我需
ifeq ($(OS), Windows_NT)
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S), Darwin)
LIBTOOL = glibtool
endif
endif
这将导致“错误:没有if的else”。不知道如何实现这一点
左边是生成的Makefile,它基本上不工作。键入“make”:
cd./.&&/bin/sh/Users/viewpl/lab/rdwtwdb git-code/rdwtwdb/missing automake-1.14--gnu-plugin/dictcn/Makefile
source='../../rwd_util.cpp'对象='../../rwd_util.lo'libtool=yes\
DEPDIR=.deps depmode=none/bin/sh.././depcomp\
glibtool--tag=CXX--mode=compile g++-DHAVE_-CONFIG_-H-I/usr/include/-I/usr/libxml2/-I/usr/local/opt/libxml2/include/libxml2/-I/usr/local/opt/readline/include-I/usr/local/include/-ikote../-include/-g-O2-c-o../.rwd\u util.lo../.rwd\u util.cpp
glibtool--tag=CXX--mode=link g++-g-O2-rpath/usr/local/bin/plugin/-o libdictcn.la-rpath/usr/local/lib/rwd dictcn.lo.././rwd_util.lo-liconv-lltdl-lz-lxml2-lreadline-lpthread-lportaudio-ldl-lcurl
glibtool:link:`.././rwd_util.lo'不是有效的libtool对象
缺少.lo文件,看起来无法将.cpp编译为.lo。我试图通过手动运行g++语句来解决这个问题,它可以帮助生成.lo。
我最后犯了这个错误:
LWIB/LIBDICN.0.LIBS/DITCN.O./LIBS/RWDJUTIL.O-LIQOL-LZDL-LXML2-LRADLION-LP-线程-LPORTAUDIO-LDL -LCURL-O2-安装名/Ur/Prime/BI/PuxIn//Ur/Prim/LIB/RWD/LIBDICTCN.0.DYLIB-AdvulyIY版本1 - CurrutyX版本1 - Wl,GLUBoTo:Link:C++动态DIABICLB-单模块 clang:错误:没有这样的文件或目录:'/usr/local/lib/rwd/libdictcn.0.dylib'
我花了很多时间在网上搜索,但帮不了什么忙。 对于解决mac上的gnu自动工具使用问题没有多大帮助 完整的源代码可以通过以下方式找到:git clone http://git.code.sf.net/p/rdwtwdb/gitcode rdwtwdb-gitcode
我正在使用OSXMavericksV10.9.2。谢谢你的建议
添加更多信息以帮助询问我为什么无法生成
。lo
在库文件夹下键入make
时,已使用glibtool生成Makefile
在库文件夹下键入make
时,它会抱怨。lo
文件丢失:
source='dictcn.cpp' object='dictcn.lo' libtool=yes \
DEPDIR=.deps depmode=none /bin/sh ../../depcomp \
/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I/usr/include/ -I/usr/include/libxml2/ -I/usr/local/opt/libxml2/include/libxml2/ -I/usr/local/opt/readline/include -I/usr/local/include/ -iquote../../include/ -iquote../../ -g -O2 -c -o dictcn.lo dictcn.cpp
source='../../rwd_util.cpp' object='../../rwd_util.lo' libtool=yes \
DEPDIR=.deps depmode=none /bin/sh ../../depcomp \
/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I/usr/include/ -I/usr/include/libxml2/ -I/usr/local/opt/libxml2/include/libxml2/ -I/usr/local/opt/readline/include -I/usr/local/include/ -iquote../../include/ -iquote../../ -g -O2 -c -o ../../rwd_util.lo ../../rwd_util.cpp
/bin/sh ../../libtool --tag=CXX --mode=link g++ -g -O2 -rpath /usr/local/bin/plugin/ -o libdictcn.la -rpath /usr/local/lib/rwd dictcn.lo ../../rwd_util.lo -liconv -lltdl -lz -lxml2 -lreadline -lpthread -lportaudio -ldl -lcurl
libtool: link: `dictcn.lo' is not a valid libtool object
make: *** [libdictcn.la] Error 1
但是在输出中给出了构建.lo
的方法。为什么它不使用它来构建.lo
?
我查看了Makefile本身,发现了构建的规则。lo
是这样的:
.cpp.lo:
$(AM_V_CXX)source='$<' object='$@' libtool=yes \
DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
$(AM_V_CXX_no)$(LTCXXCOMPILE) -c -o $@ $<
您的问题是,
ifeq
…endif
makefile语法由于缩进而无法在automake
中工作。显示了在configure.ac
中处理uname
案例的更可靠方法
我对自制啤酒不太熟悉。自制软件是否也像本机OS X GNU libtool一样调用libtool
和glibtool
和libtoolize
无论如何,在Makefile.am
中设置LIBTOOL
已经太晚了。它需要由autoeconf
处理,后者调用libtoolize
,写入libtool.m4
(由configure
编写的libtool
模板)。如果是这样的话,这样的方法可能会奏效:
LIBTOOLIZE=glibtoolize autoreconf -fvi
每当我必须使用GNU构建系统在OSX上构建时,我都会安装所有的自动工具。OS X自动工具总是很古老,在OS X上无法使用。自制的libtools软件包可能还可以,但我对它们没有任何经验,所以我真的不能肯定。我不知道这是否有帮助,但请尝试
ifneq
而不是ifeq
,后面紧跟着else
?谢谢您的回复。我用自制软件安装了新的自动工具。我不熟悉libtoolize/glibtoolize。无论如何,我尝试在configure.ac中添加'LIBTOOL=glibtool'和'LIBTOOLIZE=glibtoolize',看起来生成的Make仍然无法输出。lo'LIBTOOL:link:'dictcn.lo'不是有效的LIBTOOL对象'将LIBTOOLIZE
和LIBTOOL
添加到configure.ac
也无法修复它,因为它也太迟了。您可能想查看autoreconf
的文档。我想我现在使用的是正确的libtool,因为我检查了项目根目录下生成的“libtool”文件,它是版本2.4.2,与$glibtool--version
的结果相同。你知道为什么我的库中的Makefile为build.lo提供了正确的命令行,但在我键入make
时没有运行build.lo吗?
LIBTOOLIZE=glibtoolize autoreconf -fvi