在Solaris 10 x86下用gcc编译Poco 1.4.6

一、 系统环境

操作系统原始环境如下:

$ uname -a

SunOS sol10u6 5.10 Generic_137138-09 i86pc i386 i86pc

$ /usr/sfw/bin/gcc -v

Reading specs from /usr/sfw/lib/gcc/i386-pc-solaris2.10/3.4.3/specs

Configured with: /builds/sfw10-gate/usr/src/cmd/gcc/gcc-3.4.3/configure --prefix=/usr/sfw --with-as=/usr/sfw/bin/gas --with-gnu-as --with-ld=/usr/ccs/bin/ld --without-gnu-ld --enable-languages=c,c++ --enable-shared

Thread model: posix

gcc version 3.4.3 (csl-sol210-3_4-branch+sol_rpath)

$ /usr/ccs/bin/ld -V

ld: Software Generation Utilities - Solaris Link Editors: 5.10-1.490

$ gmake --version

GNU Make 3.80

Copyright (C) 2002  Free Software Foundation, Inc.

This is free software; see the source for copying conditions.

There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A

PARTICULAR PURPOSE.

$ /usr/sfw/bin/gld --version

GNU ld version 2.15

Copyright 2002 Free Software Foundation, Inc.

This program is free software; you may redistribute it under the terms of

the GNU General Public License.  This program has absolutely no warranty.

二、 安装补丁包

Solaris 10 x86自带的gcc版本为3,4.3,指定链接器为/usr/ccs/bin/ld,但是在poco对应gcc编译器的配置文件build/config/SunOS-GCC中,指定的链接器参数是GNU ld格式的,编译时会报出许多跟链接器有关的警告及错误,所以,必须强制gcc使用GNU ld。我不知道gcc是不是可以通过命令行参数来指定所使用的链接器,我是通过重命名系统自带的/usr/ccs/bin/ld文件,然后在/usr/ccs/bin/下建立一个符号连接,指向GNU ld来达到这一目的的。

系统自带的GNU ld版本为2.15,此版本的GNU ld有一个bug,在Solaris 10中,将许多在Solaris 9中原本处于.bbs段的符号移到了.abs段,而GNU ld不会处理.abs中导出的符号,导致在链接时报许多符号找不到的错误。在GNU binutils 2006年的bug邮件列表里详细讨论了此问题及解决方法。我不太确定GNU ld具体是在哪一个版本里修正了此bug,我下载的2.21.1版本的binutil二进制包中已经修正了此bug。binutils依赖于以下的包:libiconv,libintl,zlib,libgcc-3.4.6或者c-3.4.6。必须安装这些包才能顺利编译poco,各个包安装的先后次序没有要求。安装完各个包之后,先将系统自带的/usr/ccs/bin/ld重命名,然后ln -s /usr/local/bin/ld  ld建议一个符号连接。

www.sourceware.org/bugzilla/show_bug.cgi?id=1021

通过命令pkgadd -d filename安装以下包:

binutils-2.21.1a-sol10-x86-local

gcc-3.4.6-sol10-x86-local

libiconv-1.14-sol10-x86-local

libintl-3.4.0-sol10-x86-local

zlib-1.2.7-sol10-x86-local

安装完成后环境如下:

$ which gcc

/usr/local/bin/gcc

$ /usr/local/bin/gcc -v

Reading specs from /usr/local/lib/gcc/i386-pc-solaris2.10/3.4.6/specs

Configured with: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --enable-shared --enable-languages=c,c++,f77

Thread model: posix

gcc version 3.4.6

$ ls -l /usr/ccs/bin/ld

lrwxrwxrwx   1 root     root          17 Jan 25 11:15 /usr/ccs/bin/ld -> /usr/local/bin/ld

$ /usr/local/bin/ld --version

GNU ld (GNU Binutils) 2.21.1

Copyright 2011 Free Software Foundation, Inc.

This program is free software; you may redistribute it under the terms of

the GNU General Public License version 3 or (at your option) a later version.

This program has absolutely no warranty.

三、 修改poco配置文件

1.编辑build/config/SunOS-GCC文件,找到以下行:

#

# System Specific Libraries

#

SYSLIBS  = -lpthread -ldl -lrt

修改为:

#

# System Specific Libraries

#

SYSLIBS  = -lrt -lsocket -lnls

On S10 libpthread is an empty filter on libc, which is a fancy way of saying that all of the code in libthread moved to libc and libpthread is just a shell saying as much so that older programs linked with libpthread can still run.

gld is choking on Solaris libraries that are filters.

http://www.mentby.com/Group/sqlite-users/build-problem-of-sqlite-36142-on-solaris-10-with-gcc-440.html

2.编辑build/rules/global文件,找到以下行:

#

# Build Include directory List

#

INCLUDE = $(foreach p,$(POCO_ADD_INCLUDE),-I$(p)) -Iinclude $(foreach p,$(COMPONENTS),-I$(POCO_BASE)/$(p)/$(INCDIR))

#

# Build Library Directory List

#

LIBRARY = $(foreach p,$(POCO_ADD_LIBRARY),-L$(p)) -L$(LIBPATH:) $(POCO_LIBRARY)

修改为:

#

# Build Include directory List

#

INCLUDE = $(foreach p,$(POCO_ADD_INCLUDE),-I$(p)) -Iinclude -I/usr/sfw/include -

I/usr/sfw/include/mysql $(foreach p,$(COMPONENTS),-I$(POCO_BASE)/$(p)/$(INCDIR))

#

# Build Library Directory List

#

LIBRARY = $(foreach p,$(POCO_ADD_LIBRARY),-L$(p)) -L/usr/sfw/lib -L$(LIBPATH) $(

POCO_LIBRARY)

======

3.运行configure生成配置文件:

$ ./configure --prefix=$HOME/poco --config=SunOS-GCC --omit=Data/ODBC,Data/MySQL

Configured for SunOS-GCC

时间: 2024-10-04 04:09:31

在Solaris 10 x86下用gcc编译Poco 1.4.6的相关文章

关于在linux下用gcc编译头文件的问题。

关于在linux下用gcc编译头文件的问题. 2011-01-21 18:5215052135380 | 分类:其他编程语言 | 浏览8139次 有node.h prepare.h list.h file.h 这四个头文件, prepare.h中用到了node.h, list.h中用到了preapre.h , file.h中用到了list.h ,怎么用gcc对这四个头文件进行编译. 分享到: 2011-01-22 02:23 天天爱答题,抽奖送惊喜~ 提问者采纳 我用一个例子来告诉你怎么样在 C

Linux下的GCC编译指令

1简介 GCC 的意思也只是 GNU C Compiler 而已.经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言:它现在还支持 Ada 语言.C++ 语言.Java 语言.Objective C 语言.Pascal 语言.COBOL语言,以及支持函数式编程和逻辑编程的 Mercury 语言,等等.而 GCC 也不再单只是 GNU C 语言编译器的意思了,而是变成了 GNU Compiler Collection 也即是 GNU 编译器家族的意思了.另一方面,说到 GCC 对于操作系统平

Solaris 10(x86)构建Oracle 10g RAC之--配置系统环境(2)

Solaris 10(x86)构建Oracle 10g RAC之--配置系统环境(2) 系统环境: 操作系统:Solaris 10(x86-64) Cluster: Oracle CRS 10.2.0.1.0 Oracle:  Oracle 10.2.0.1.0 如图所示:RAC 系统架构 一.建立主机之间的信任关系(在所有node) 1.配置主机hosts.equiv文件 [[email protected]:/]# cat /etc/hosts.equiv  node1  root node

Solaris 10(x86)构建Oracle 10g RAC之--建立数据库

Solaris 10(x86)构建Oracle 10g RAC之--建立数据库 系统环境: 操作系统:Solaris 10(x86-64) Cluster: Oracle CRS 10.2.0.1.0 Oracle:  Oracle 10.2.0.1.0 如图所示:RAC 系统架构 四.通过netca建立监听器      对于listener可以通过netca在建库之前建立,也可以在用dbca建库时来建立. Listener建立成功,验证: [[email protected]:/]# crs_

在Linux下使用gcc编译mesa文件报undefined reference to symbol '[email protected]@GLIBC_2.2.5和DSO missing from command line两个错误的解决方案

一.概述 在Linux系统下使用gcc编译用C语言写的mesa的示例程序. 环境:Ubuntu Server 18.04.1 二.问题的出现 在Ubuntu下安装好mesa所需的库文件,将目标文件从github上克隆下来之后编译. 以上截取的是用gcc编译目标文件和传参的介绍: gcc:源程序将用gcc编译器进行编译: osdemo,c:将要被编译的源程序: -lOSMesa:链接OSMesa库: -lGLU:链接GLU库: -lGL:链接GL库: -o:指定目标名称: osdemo:编译后生成

Solaris 10(x86)构建Oracle 10g RAC之--配置系统环境(1)

系统环境: 操作系统:Solaris 10(x86-64) Cluster: Oracle CRS 10.2.0.1.0 Oracle:  Oracle 10.2.0.1.0 如图所示:RAC 系统架构 一.操作系统环境 1.网络配置(在所有节点) [[email protected]:/]# cat /etc/inet/ipnodes  # # Internet host table # ::1     localhost        127.0.0.1       localhost   

linux下使用gcc编译运行C程序

gcc(GNU Compiler Collection)是Linux下最常用的C语言编译器,是GNU项目中符合ANSI C标准的编译系统,能够编译用C.C++和Object C等语言编写的程序.  在linux系统中,常见的使用方法有两种,如下: gcc -o out in1 in2 //gcc编译以及链接(对in1文件和in2文件进行编译生成out.bin文件,"-o":表示生成可执行文件) gcc -c out in1 in2 // gcc编译不链接(对in1文件和in2文件文件进

linux下利用gcc编译C和C++

gcc ------->默认编译c文件(gcc  xxx  -lstdc++链接到c++库编译c++,g++默认编译c++) 一.CC编译程序过程分四个阶段◆ 预处理(Pre-Processing)◆ 编译(Compiling)◆ 汇编(Assembling)◆ 链接(Linking) 1.1 预处理(Pre-Processing) gcc -E test.c -o test.i 或 gcc -E test.c 可以输出test.i文件中存放着test.c经预处理之后的代码.打开test.i文件

在Solaris 10 sparc下安装oracle database 10gR2需要打的os package和os patch

参考自: Oracle Database (RDBMS) on Unix AIX,HP-UX,Linux,Mac OS X,Solaris,Tru64 Unix Operating Systems Installation and Configuration Requirements Quick Reference (8.0.5 to 11.2) (文档 ID 169706.1) Required Packages: SUNWarc, SUNWbtool, SUNWhea, SUNWlibm,