交叉编译libACE
2014-02-25 17:03
274 查看
1. 下载
访问ACE的官网http://download.dre.vanderbilt.edu/
下载ACE.tar.gz2 ,链接http://download.dre.vanderbilt.edu/previous_versions/ACE-6.2.4.tar.bz2
关于需要使用的sunxi交叉编译器,见/article/8355109.html
2. 准备
执行命令,设置ACE_ROOT环境变量
修改Makefile中的编译器为sunxi的arm-linux-gnueabihf-*,Vi打开 include/makeinclude/platform_g++_common.GNU,原文为:
执行make,编译了一阵后出现错误:
造成的,修改ace/config.h,在其中增加
执行
访问ACE的官网http://download.dre.vanderbilt.edu/
下载ACE.tar.gz2 ,链接http://download.dre.vanderbilt.edu/previous_versions/ACE-6.2.4.tar.bz2
关于需要使用的sunxi交叉编译器,见/article/8355109.html
2. 准备
执行命令,设置ACE_ROOT环境变量
export ACE_ROOT=/home/sakaue/ace/ACE_wrappers cd ~/ACE_wrappers/ace/ cp ./config-linux.h ./config.h cd ../include/makeinclude/ ln -s ./platform_linux.GNU ./platform_macros.GNU
修改Makefile中的编译器为sunxi的arm-linux-gnueabihf-*,Vi打开 include/makeinclude/platform_g++_common.GNU,原文为:
ifeq ($(insure),1) CC = insure CXX = insure else ifneq ($(CROSS_COMPILE),) CROSS-COMPILE = 1 # Build using the cross-tools ifneq ($($CROSS_COMPILE_POSTFIX),) CC = ${CROSS_COMPILE}gcc{$CROSS_COMPILE_POSTFIX} CXX = ${CROSS_COMPILE}g++{$CROSS_COMPILE_POSTFIX} AR = ${CROSS_COMPILE}ar{$CROSS_COMPILE_POSTFIX} else CC = ${CROSS_COMPILE}gcc CXX = ${CROSS_COMPILE}g++ AR = ${CROSS_COMPILE}ar endif # Cross-linker requires this for linked in shared libs that depend # themselves on other shared libs (not directly linked in) LDFLAGS += -Wl,-rpath-link,$(ACE_ROOT)/lib ifneq (,$(HOST_ROOT)) TAO_IDLFLAGS += -g $(HOST_ROOT)/bin/ace_gperf TAO_IDL = $(HOST_ROOT)/bin/tao_idl TAO_IDL_DEP = $(TAO_IDL) TAO_IDL3_TO_IDL2 = $(HOST_ROOT)/bin/tao_idl3_to_idl2 TAO_IDL3_TO_IDL2_DEP = $(TAO_IDL3_TO_IDL2) TAO_IDL3_TO_XMI = $(HOST_ROOT)/bin/tao_idl3_to_xmi TAO_IDL3_TO_XMI_DEP = $(TAO_IDL3_TO_XMI) # make sure to use the target compiler, not the cross-compiler # as preprocessor for the cross-compiled idl tools TAO_IDL_PREPROCESSOR = gcc endif endif endif修改为
CROSS_COMPILE:=arm-linux-gnueabihf- #ifeq ($(insure),1) # CC = insure # CXX = insure #else ifneq ($(CROSS_COMPILE),) CROSS-COMPILE = 1 # Build using the cross-tools ifneq ($($CROSS_COMPILE_POSTFIX),) CC = ${CROSS_COMPILE}gcc{$CROSS_COMPILE_POSTFIX} CXX = ${CROSS_COMPILE}g++{$CROSS_COMPILE_POSTFIX} AR = ${CROSS_COMPILE}ar{$CROSS_COMPILE_POSTFIX} else CC = ${CROSS_COMPILE}gcc CXX = ${CROSS_COMPILE}g++ AR = ${CROSS_COMPILE}ar endif # Cross-linker requires this for linked in shared libs that depend # themselves on other shared libs (not directly linked in) LDFLAGS += -Wl,-rpath-link,$(ACE_ROOT)/lib ifneq (,$(HOST_ROOT)) TAO_IDLFLAGS += -g $(HOST_ROOT)/bin/ace_gperf TAO_IDL = $(HOST_ROOT)/bin/tao_idl TAO_IDL_DEP = $(TAO_IDL) TAO_IDL3_TO_IDL2 = $(HOST_ROOT)/bin/tao_idl3_to_idl2 TAO_IDL3_TO_IDL2_DEP = $(TAO_IDL3_TO_IDL2) TAO_IDL3_TO_XMI = $(HOST_ROOT)/bin/tao_idl3_to_xmi TAO_IDL3_TO_XMI_DEP = $(TAO_IDL3_TO_XMI) # make sure to use the target compiler, not the cross-compiler # as preprocessor for the cross-compiled idl tools TAO_IDL_PREPROCESSOR = gcc endif endif #endif3. 编译
执行make,编译了一阵后出现错误:
.shobj/MEM_Acceptor.o:(.rodata+0x0): multiple definition of `typeinfo name for ACE_Singleton<ACE_Based_Pointer_Repository, ACE_RW_Thread_Mutex>' .shobj/Based_Pointer_Repository.o:(.rodata+0x0): first defined here .shobj/MEM_Acceptor.o:(.data.rel.ro+0x0): multiple definition of `typeinfo for ACE_Singleton<ACE_Based_Pointer_Repository, ACE_RW_Thread_Mutex>' .shobj/Based_Pointer_Repository.o:(.data.rel.ro+0x0): first defined here .shobj/MEM_Connector.o:(.rodata+0x0): multiple definition of `typeinfo name for ACE_Singleton<ACE_Based_Pointer_Repository, ACE_RW_Thread_Mutex>' .shobj/Based_Pointer_Repository.o:(.rodata+0x0): first defined here .shobj/MEM_Connector.o:(.data.rel.ro+0x0): multiple definition of `typeinfo for ACE_Singleton<ACE_Based_Pointer_Repository, ACE_RW_Thread_Mutex>' .shobj/Based_Pointer_Repository.o:(.data.rel.ro+0x0): first defined here ...推测是ace/config-g++-common.h中的宏定义
ACE_EXPORT_SINGLETON_DECLARATION ACE_EXPORT_SINGLETON_DECLARE
造成的,修改ace/config.h,在其中增加
#define ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS 1或者,在include/makeinclude/platform_macros.GNU中增加
no_hidden_visibility=1注意,该语句必须加在include $(ACE_ROOT)/include/makeinclude/platform_linux_common.GNU之前,如
# -*- Makefile -*- # $Id: platform_linux.GNU 97130 2013-05-13 17:36:26Z mesnier_p $ no_hidden_visibility=1 include $(ACE_ROOT)/include/makeinclude/platform_linux_common.GNU
执行
make clean makeOK,顺利通过
相关文章推荐
- Qt 中Socket编程实例
- 我的第一篇博客
- 在嵌入式Linux系统中实现USB存储设备的自动挂载
- DBlink创建 查询
- IE6下3像素问题
- Android中的人脸检测(静态和动态)
- Codeforces Round #231 (Div2) 迟到的解题报告
- iOS:自定义UIBarButtonItem
- 约瑟夫环(好人坏人)
- hdu1856 More is better(并查集)
- 解决SecureCRT显示中文乱码
- 消费者购物行为的5道门
- MVC思想及其优势
- ArrayBlockingQueue 实现线程同步效果例子
- 获取当前类的绝对路径,去掉file:/
- vs2013 内置IIS Express相关问题
- Environment 常用方法
- 随笔:民国女人在战乱的泥潭中苦苦挣扎
- Java byte数组和int互转
- MySQL Replace INTO的使用