PCL - 从源代码编译Glib,FFI链接

3
我需要在Linux服务器上安装PCL(点云库),但没有root访问权限。然后我下载了源码并检查了依赖项,以下是我找到的依赖关系:
PCL --BOOST ----ZLIB ----BZIP --EIGEN --FLANN ----HDF5 ----LIBUSB ------UDEV --------GLIB ----------LIBFFI ----------ZLIB --VTK
我需要从源代码编译glib。Glib需要FFI库,所以我下载了它们,并在/home/franz/Downloads/libffi-3.0.13/installed中进行了编译和安装,然后设置了以下变量:
LD_LIBRARY_PATH=/home/franz/Downloads/libffi-3.0.13/installed/lib LIBFFI_CFLAGS="-I/home/franz/Downloads/libffi-3.0.13/installed/lib/libffi-3.0.13/include" LIBFFI_LIBS="-lffi -L/home/franz/Downloads/libffi-3.0.13/installed/lib"
然后运行./configure和make。我得到了以下错误:
make[4]: 进入目录 `/home/franz/Downloads/glib-2.37.5/gobject'
/bin/bash ../libtool  --tag=CC   --mode=link gcc -Wall -Wstrict-prototypes -Werror=declaration-after-statement -Werror=missing-prototypes -Werror=implicit-function-declaration -Werror=pointer-arith -Werror=init-self -Werror=format-security -Werror=format=2 -Werror=missing-include-dirs -g -O2   -o gobject-query gobject-query.o ./libgobject-2.0.la ../glib/libglib-2.0.la 
libtool: 链接器: gcc -Wall -Wstrict-prototypes -Werror=declaration-after-statement -Werror=missing-prototypes -Werror=implicit-function-declaration -Werror=pointer-arith -Werror=init-self -Werror=format-security -Werror=format=2 -Werror=missing-include-dirs -g -O2 -o .libs/gobject-query gobject-query.o  ./.libs/libgobject-2.0.so -L/home/franz/Downloads/libffi-3.0.13/installed/lib /home/franz/Downloads/glib-2.37.5/glib/.libs/libglib-2.0.so ../glib/.libs/libglib-2.0.so -lpthread -lrt -Wl,-rpath -Wl,/home/franz/Downloads/glib-2.37.5/installed/lib
./.libs/libgobject-2.0.so: 对 `ffi_type_void' 的未定义引用
./.libs/libgobject-2.0.so: 对 `ffi_type_double' 的未定义引用
./.libs/libgobject-2.0.so: 对 `ffi_prep_cif' 的未定义引用
./.libs/libgobject-2.0.so: 对 `ffi_type_sint32' 的未定义引用
./.libs/libgobject-2.0.so: 对 `ffi_type_float' 的未定义引用
./.libs/libgobject-2.0.so: 对 `ffi_type_uint64' 的未定义引用
./.libs/libgobject-2.0.so: 对 `ffi_type_sint64' 的未定义引用
./.libs/libgobject-2.0.so: 对 `ffi_type_pointer' 的未定义引用
./.libs/libgobject-2.0.so: 对 `ffi_type_uint32' 的未定义引用
./.libs/libgobject-2.0.so: 对 `ffi_call' 的未定义引用

然后我看到了我想要包含并在配置中设置为LIBFFI_CFLAGS/LIBS的库没有在make中出现,所以我改变了我的CC变量来强制编译器使用我的库:

LIBFFI_CFLAGS="-I/home/franz/Downloads/libffi-3.0.13/installed/lib/libffi-3.0.13/include" LIBFFI_LIBS="-lffi -L/home/franz/Downloads/libffi-3.0.13/installed/lib" ZLIB_CFLAGS="-I/home/franz/Downloads/zlib-1.2.8/installed/include" ZLIB_LIBS="-L/home/franz/Downloads/zlib-1.2.8/installed/lib" CC="gcc $LIBFFI_CFLAGS $LIBFFI_LIBS" CXX="/usr/bin/g++-4.4 $LIBFFI_CFLAGS $LIBFFI_LIBS" ./configure --prefix=`pwd`/installed

并且制作

这样,我们将在制作过程中得到gcc -I... -lffi -L...而不是gcc。目前为止这个方法是有效的。但是现在我在另一个位置遇到了同样的错误:

make[4]: 进入目录 `/home/franz/Downloads/glib-2.37.5/gio'
/bin/bash ../libtool --tag=CC --mode=link gcc -I/home/franz/Downloads/libffi-3.0.13/installed/lib/libffi-3.0.13/include -lffi -L/home/franz/Downloads/libffi-3.0.13/installed/lib -Wall -Wstrict-prototypes -Werror=declaration-after-statement -Werror=missing-prototypes -Werror=implicit-function-declaration -Werror=pointer-arith -Werror=init-self -Werror=format-security -Werror=format=2 -Werror=missing-include-dirs -g -O2 -o gio-querymodules gio-querymodules.o ../glib/libglib-2.0.la ../gobject/libgobject-2.0.la ../gmodule/libgmodule-2.0.la libgio-2.0.la 

libtool: 链接器: gcc -I/home/franz/Downloads/libffi-3.0.13/installed/lib/libffi-3.0.13/include -Wall -Wstrict-prototypes -Werror=declaration-after-statement -Werror=missing-prototypes -Werror=implicit-function-declaration -Werror=pointer-arith -Werror=init-self -Werror=format-security -Werror=format=2 -Werror=missing-include-dirs -g -O2 -o .libs/gio-querymodules gio-querymodules.o -L/home/franz/Downloads/libffi-3.0.13/installed/lib ../glib/.libs/libglib-2.0.so ../gobject/.libs/libgobject-2.0.so ../gmodule/.libs/libgmodule-2.0.so ./.libs/libgio-2.0.so -L/home/franz/Downloads/zlib-1.2.8/installed/lib /home/franz/Downloads/glib-2.37.5/gobject/.libs/libgobject-2.0.so /home/franz/Downloads/glib-2.37.5/gmodule/.libs/libgmodule-2.0.so -ldl /home/franz/Downloads/glib-2.37.5/glib/.libs/libglib-2.0.so -lpthread -lrt /home/franz/Downloads/libffi-3.0.13/installed/lib/../lib/libffi.so -lresolv -Wl,-rpath -Wl,/home/franz/Downloads/glib-2.37.5/installed/lib -Wl,-rpath -Wl,/home/franz/Downloads/libffi-3.0.13/installed/lib/../lib
../gobject/.libs/libgobject-2.0.so: 未定义的引用 'ffi_type_void'
../gobject/.libs/libgobject-2.0.so: 未定义的引用 'ffi_type_double'
../gobject/.libs/libgobject-2.0.so: 未定义的引用 'ffi_prep_cif'
../gobject/.libs/libgobject-2.0.so: 未定义的引用 'ffi_type_sint32'
../gobject/.libs/libgobject-2.0.so: 未定义的引用 'ffi_type_float'
../gobject/.libs/libgobject-2.0.so: 未定义的引用 'ffi_type_uint64'
../gobject/.libs/libgobject-2.0.so: 未定义的引用 'ffi_type_sint64'
../gobject/.libs/libgobject-2.0.so: 未定义的引用 'ffi_type_pointer'
../gobject/.libs/libgobject-2.0.so: 未定义的引用 'ffi_type_uint32'
../gobject/.libs/libgobject-2.0.so: 未定义的引用 'ffi_call'
问题在于,在这种情况下,库已经存在(您可以看到-lffi -L<ffi_libs_path>),但错误与之前相同。有什么办法让它工作?我重申一遍,我不能安装库,因为我没有root权限。任何建议将不胜感激。
2个回答

4

使用

export LIBFFI_LIBS="-L/你的/ffi库路径/ -lffi"


-1
在执行./configure之后,你可以编辑你的Makefile文件。找到"LIBFFI_LIBS=..."这一行,并在末尾添加"-lffi"。就像这样:"LIBFFI_LIBS=-L/work/opencv-static/libffi-3.2.1/output/lib -lffi"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接