在Solaris 10 x86下用gcc编译Poco 1.4.6

操作系统原始环境如下:

美元uname -a 

5.10 SunOS sol10u6 Generic_137138-09 i86pc i386 i86pc $/usr/sfw/bin/gcc - v

阅读规格从/usr/sfw/lib/gcc/i386-pc-solaris2.10/3.4.3/规格

配置:/构建/sfw10-gate/usr/src/cmd/gcc/gcc-3.4.3/configure——prefix=/usr/sfw——以=/usr/sfw/bin/气体——with-gnu-as with-ld ccs/=/usr/bin/ld - without-gnu-ld enable-languages=c, c++,启用共享

线程模型:posix

的gcc版本3.4.3 (csl-sol210-3_4-branch + sol_rpath)

/usr/ccs/bin/ld美元- v

ld:软件生成实用工具——Solaris链接编辑:5.10 - -1.490

gmake美元——

GNU版本版权让

3.80 (c) 2002年,自由软件基金会,Inc .

这是自由软件;看到复制的源条件。

没有保证;甚至不适销性或适合

特定目的。

/usr/sfw/bin/gld美元——GNU ld版本

2.15版本版权2002自由软件基金会,Inc .

这个程序是自由软件;你可以重新分配根据

GNU通用公共许可证。这个项目完全没有保修。

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

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

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

通过命令pkgadd - d文件名安装以下包:

binutils-2.21.1a-sol10-x86-local gcc-3.4.6-sol10-x86-local

libiconv - 1.14 - sol10 - x86 -当地

libintl-3.4.0-sol10-x86-local zlib-1.2.7-sol10-x86-local

安装完成后环境如下:

美元,gcc

/usr/地方/bin/gcc $/usr/local/bin/gcc - v

阅读规格从/usr/local/lib/gcc/i386-pc-solaris2.10/3.4.6/规格

配置:. .ccs//配置——以=/usr/bin/獁ith-ld=/usr/ccs/bin/ld -启用共享enable-languages=c, c++, f77

线程模型:posix gcc 3.4.6版

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

lrwxrwxrwx,1根,,根,,,,,17日1月25日11:15/usr/ccs/bin/ld→/usr/local/bin/ld

/usr/local/bin/ld美元——版本

GNU ld (GNU Binutils) 2.21.1

2011年版权自由软件基金会,Inc .

这个程序是自由软件;你可以重新分配根据

GNU通用公共授权版本3或(任您选)以后的版本。

这个节目完全没有保修。

1。编辑构建/config/SunOS-GCC文件,找到以下行:

# #系统特定库

# SYSLIBS,=-lpthread ldl轻轨车

修改为:

# #系统特定库

# SYSLIBS,=扒峁?lsocket -lnls

libc S10 libpthread是空滤,这是奇特的方式,所有的代码在libthread搬到libc libpthread只是一个壳说,老项目与libpthread仍然可以运行。

gld是窒息在Solaris库过滤器只

http://www.mentby.com/group/sqlite users/build -问题- sqlite - 36142 -与- gcc - Solaris 10 - 440. - html

2。编辑建立/规定/全球文件,找到以下行:

# #构建包括目录列表

号包括=$(美元foreach p (POCO_ADD_INCLUDE),我(p)美元)-Iinclude美元(美元foreach p(组件),我(POCO_BASE)/美元(p)/$ (INCDIR))


# #构建图书馆目录列表

#库=$(美元foreach p (POCO_ADD_LIBRARY) - l (p)美元)- l (LIBPATH:)美元(POCO_LIBRARY)

修改为:

# #构建包括目录列表

号包括=$(美元foreach p (POCO_ADD_INCLUDE),我(p)美元)-Iinclude - I/usr/sfw/包括-

I/usr/sfw/Include/mysql美元(美元foreach p(组件),我(POCO_BASE)/美元(p)/$ (INCDIR))


# #构建图书馆目录列表

#库=$(美元foreach p (POCO_ADD_LIBRARY) - l (p)美元)- l/usr/sfw/lib - l (LIBPATH)美元(

在Solaris 10 x86下用gcc编译Poco 1.4.6