交叉编译dbus文章汇总

预安装vmware6.0, debian4.0 linux OS 配置IP, samba, telnet等网络服务


安装包命令:
./configure CC=arm-unknown-linux-gnu-gcc --prefix=/home/qudc/nfs --host=arm-linux --cache-file=arm-linux.cache
指定交叉编译工具                      指定安装路径          指定目标平台
make
make install


1. 把"export PATH=$PATH:/home/qudc/gcc-4.0.2-glibc-2.3.5/arm-unknown-linux-gnu/bin (不要加/)" 加入/home/qudc/.bashrc
export交叉编译工具链接路径. 


2. 用root apt-get install gcc


3. 解压交叉编译工具和linux kernel 使kernel 中make menuconfig 成功. 会遇到头文件报错问题: 安装libc6-dev 和 libncurses5-dev 这两个包. make menuconfig 成功.


4. 安装pkg-config (只能是0.9版, 系统debian4是0.21版, 不然dbus编译不过) 为glib做准备. apt-get install pkg-config


5. 解决安装glib的编译错误
stack pointer 问题:
echo ac_cv_type_long_long=yes>arm-linux.cache
echo glib_cv_stack_grows=no>>arm-linux.cache
echo glib_cv_uscore=no>>arm-linux.cache
echo ac_cv_func_posix_getpwuid_r=yes>>arm-linux.cache 
configure: error: Could not find a glib-genmarshal in your PATH
解压glib2-devel-2.4.7-1.tar.gz, 将文件复制到/usr/local下面


6. 安装expat-2.0.0.tar.gz


7. 安装libxml.tar.bz2

下载dbus源码,地址是http://www.freedesktop.org/wiki/Software/dbus
8. install  dbus-1.0.2.tar.gz
checking abstract socket namespace... configure: error: cannot run test program while cross compiling
#echo ac_cv_have_abstract_sockets=yes>arm-linux.cache


PKG_CONFIG_PATH 问题:
在.bashrc里 export PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/home/qudc/nfs/lib/pkgconfig
configure成功


9. Install  dbus-glib-0.74.tar.gz
checking for posix getpwnam_r... configure: error: cannot run test program while cross compiling
checking abstract socket namespace... configure: error: cannot run test program while cross compiling
在arm-linux.cache文件里加两行
ac_cv_func_posix_getpwnam_r=yes
ac_cv_have_abstract_sockets=yes


./configure: line 26052: ./po/POTFILES.in: No such file or directory (这行有人说可以忽略)
checking for XML_ParserCreate_MM in -lexpat... (cached) no
configure: error: expat library not found, check config.log for failed attempts
解决: #./configure CC=arm-unknown-linux-gnu-gcc CPPFLAGS=-I/home/qudc/nfs/include LDFLAGS=-L/home/qudc/nfs/lib --prefix=/home/qudc/nfs --host=arm-linux --cache-file=arm-linux.cache


make 出错信息:
Making all in examples
make[4]: Entering directory `/home/qudc/dbus-glib-0.74/dbus/examples'
/bin/sh ../../libtool --mode=execute ../../dbus/dbus-binding-tool --prefix=some_object --mode=glib-server --output=example-service-glue.h ./example-service.xml
/home/qudc/dbus-glib-0.74/dbus/examples/../../dbus/dbus-binding-tool: line 105: /home/qudc/dbus-glib-0.74/dbus/.libs/lt-dbus-binding-tool: cannot execute binary file
/home/qudc/dbus-glib-0.74/dbus/examples/../../dbus/dbus-binding-tool: line 105: /home/qudc/dbus-glib-0.74/dbus/.libs/lt-dbus-binding-tool: Success
make[4]: *** [example-service-glue.h] Error 1
make[4]: Leaving directory `/home/qudc/dbus-glib-0.74/dbus/examples'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/home/qudc/dbus-glib-0.74/dbus'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/qudc/dbus-glib-0.74/dbus'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/qudc/dbus-glib-0.74'
make: *** [all] Error 2
解决:修改./dbus/Makefile. 
   SUBDIRS = . examples => SUBDIRS = . #example


make再次出错信息:
Making all in tools
make[2]: Entering directory `/home/qudc/dbus-glib-0.74/tools'
DBUS_TOP_BUILDDIR=.. dbus-daemon --introspect > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml
../dbus/dbus-binding-tool --mode=glib-client --prefix=dbus_bus --output=dbus-glib-bindings.h dbus-bus-introspect.xml
../dbus/dbus-binding-tool: line 105: /home/qudc/dbus-glib-0.74/dbus/.libs/lt-dbus-binding-tool: cannot execute binary file
../dbus/dbus-binding-tool: line 105: /home/qudc/dbus-glib-0.74/dbus/.libs/lt-dbus-binding-tool: Success
make[2]: *** [dbus-glib-bindings.h] Error 1
make[2]: Leaving directory `/home/qudc/dbus-glib-0.74/tools'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/qudc/dbus-glib-0.74'
make: *** [all] Error 2
解决: 修改./dbus/Makefile. 
   SUBDIRS = . examples => SUBDIRS = . #example


D-BUS编译终于完成. http://jz345.net/?action-viewnews-itemid-51660
CMake是一个开源的跨平台自动化构建系统,它可以帮助管理项目依赖、设置构建选项并生成各种构建工具所需的配置文件,如Unix Makefiles、Visual Studio项目等。对于要在不同架构之间进行交叉编译(例如,在Linux上为嵌入式设备编译DBus服务),你可以按照以下步骤操作: 1. **安装必要的工具**:首先确保你在主机机器上已经安装了CMake,并且知道如何使用它。同时,需要针对目标平台选择合适的编译器和链接器。 2. **设置CMakeLists.txt**:在你的CMakeLists.txt文件中,添加特定于平台的编译信息。比如,如果你要为ARM架构编译,可以指定`CMAKE_SYSTEM_NAME`和`CMAKE_SYSTEM_PROCESSOR`变量。示例: ```cmake set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) ``` 3. **指定库路径**:如果目标平台的DBus库位置与主机不同,需要通过`find_package(DBus REQUIRED)`命令指定正确的路径,可能还需要提供额外的`DBUS_CFLAGS`和`DBUS_LIBRARIES`。 4. **构建选项**:使用`add_executable`或`add_library`创建目标时,使用`target_link_libraries`指明包含DBus库,确保传递适当的链接器标志,如 `-ldbus-1` 或 `-L/path/to/dbus/library`. 5. **生成配置**:运行`cmake`命令生成构建配置文件,例如`cmake -DCMAKE_TOOLCHAIN_FILE=path/to/toolchain_file.cmake .`,其中`toolchain_file.cmake`包含了针对特定架构的编译器路径等信息。 6. **构建**:生成目标平台的Makefile或解决方案(取决于所选的构建系统),然后使用`make`(Unix)或`ninja`(有时推荐)在目标平台上构建DBus服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值