免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3470 | 回复: 4
打印 上一主题 下一主题

linux编程FAQ(1) [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-06-16 16:17 |只看该作者 |倒序浏览
回答的问题如下:


  1. 1.1)    我需要对 src/Makefile.global 或
  2.         src/Makefile.custom 文件做什么修改以及我还需要做其他修改吗?
  3. 1.2)    为什么我在缺少 libreadline 时会有麻烦?
  4. 1.3)    [REDHAT] 为什么我缺少 libdl 和 dlfcn.h 时会有麻烦?
  5. 1.4)    [SLACKWARE 3.1] 为什么我缺少 libdl 和 dlfcn.h 时会有麻烦?
  6. 1.5)    我编译后端时退出了,并且报错说缺少头文件dlfcn.h
  7. 1.6)    GCC 抱怨说选项 -fpic 被忽略
  8. 1.7)    我收到下面形式的警告
  9.         warning: cast from pointer to integer of different size
  10. 1.8)    [SuSE-Linux 4.2-4.4] curses 和 termcap 在那里?
  11. 1.9)    为什么我的 ld.so 有问题?
  12. 1.10)   为什么我收到 `yy_flush_buffer undefined' 错误?
  13. 1.11)   我怎样在一个 a.out 系统上编译 PostgreSQL ?
  14. 1.12)   为什么制作带着下面信息退出:
  15.         yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y
  16.         make: /usr/bin/make: cannot execute binary file
  17. 1.13)   在 src/Makefile.global 里 X11_LIB 对 libsocket 和 libnsl 的引用在那里?
  18. 1.14)   [DEBIAN] libtermcap 在那里?
  19. 1.15)   [REDHAT] 我能把 PostgreSQL 做成 RPM 吗?
  20. 1.16)   当我试图在 Linux 下编译一个开发版本时,编译带着
  21.         类似下面的信息退出了:
  22.         In file included from /usr/include/sys/sem.h:8,
  23.                  from ipc.c:37:
  24.         /usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit'
  25.         ....
  26.         make: *** [ipc.o] Error 1
  27. 1.17)   当编译 postgres 时,gcc 报告信号 11 并退出。
  28. 1.18)   我能否在 MkLinux 里安装 6.1.1?
  29. 1.19)   为什么制作退出或崩溃?
  30. 1.20)   我如何为 486 或 pentium 处理器做优化?
  31. 1.21)   为什么我打印时间时会得到奇怪的结果(例如
  32.         在蜕变测试 'timespan' 时)?
  33. 1.22)   为什么我编译 6.3.2 时为什么我没有生成任何 libqp 的共享库?
  34. 1.23)   为什么编译失败,并且说 F_BOOLIN,F_BOOLOUT 和 F_BYTEAIN 未定义?
  35. 2.1)    在编译 pgtclsh 时,链接器没有找到 libX11
  36. 3.1)    在运行象 createuser 这样的脚本时,我收到一个错误,说 _fUnKy_POSTPORT_sTuFf_ 未定义
  37. 3.2)    我运行 postmaster 然后系统告诉我 'Bad system call(Core dumped)'(系统调用错误(内核倾倒))
  38. 3.3)    当我试图启动 Postmaster,为何我会收到下面形式的错误信息
  39.         Failed Assertion("!(file != 0):(null)", File:
  40.         "/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257)
  41.         !(file != 0) (0)
  42.         initdb: could not create template database
  43.         initdb: cleaning up.
  44. 3.4)    为什么 createuser 不管用?
  45. 3.5)    为什么我会收到下面这样的信息:
  46.         IpcMemoryCreate: memKey=155356396 , size=760632 ,
  47.         permission=384IpcMemoryCreate: shmget(..., create, ...)
  48.         failed: Invalid argument
  49. 3.6)    为什么 psql 带着下面的错误信息失效了:
  50.         psql: can't load library 'libpq.so.1'
  51. 3.7)    其他奇怪的表现
  52. 3.8)    当 PostgreSQL 运行时宕掉系统,重起时 Linux
  53.         总是对磁盘进行 fsck。
  54. 3.9)    为什么蜕变测试中 Query 32 用了很长时间?
  55. 3.10)   为什么在一些日期/时间运算中我得到一些有趣的圆整?
  56.         例如
  57.            select '4 hours'::timespan;
  58.         returning '3 hours 59 minutes 60 seconds'?     

复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-06-16 16:18 |只看该作者

linux编程FAQ(1)


  1. 1.1)    我需要对o src/Makefile.global 或
  2.         src/Makefile.custom 文件做什么修改以及我还需要做其他修改吗?

  3. 运行 src 目录里面的客户化脚本是修改 makefile 的最简单方法,
  4.         它会为你生成一个 Makefile.custom 。

  5.         你可能需要做的其他修改是替换 2.5.3 Flex,
  6.         因为这个版本有臭虫,通常表现为 createuser 失败(参阅问题 3.4)

  7.         如果你手工修改 makefiles,你*必须*设置下面的变量
  8.                 PORTNAME=       linux

  9.        你还需要把下面的变量改变为你自己的安装:
  10.                 POSTGRESDIR

  11.        如果你打开了 USE_TCL 选项,你将需要设置下面的内容:
  12.                 TCL_INCDIR=
  13.                 TCL_LIBDIR=
  14.                 TCL_LIB=
  15.                 TK_INCDIR=
  16.                 TK_LIBDIR=
  17.                 TK_LIB=
  18.                 X11_INCDIR=
  19.                 X11_LIBDIR=
  20.                 X11_LIB=

  21.         在我的 Slackware3.0 系统上,这些是:
  22.                 TCL_INCDIR=     /usr/include/tcl
  23.                 TCL_LIBDIR=     /usr/lib
  24.                 TCL_LIB=        -ltcl
  25.                 TK_INCDIR=      /usr/include/tcl
  26.                 TK_LIBDIR=      /usr/lib
  27.                 TK_LIB=         -ltk
  28.                 X11_INCDIR=     /usr/include/X11
  29.                 X11_LIBDIR=     /usr/X386/lib
  30.                 X11_LIB=        -lX11

  31.         你可能还要按照  INSTALL 文件和 Makefile.global 文档里描述的那样做其他修改。


  32. 1.2)    为什么我在缺少 libreadline 时会有麻烦?

  33.         Linux 系统通常不自带 GNU readline 库。
  34.         要么确信自己没有在 src/Makefile.global 或 src/Makefile.custom 里激活 readline 选项
  35.         要么把 GNU readline 库装上。

  36.         请注意t Debian Linux (象 FreeBSD 一样)的确自带 readline。

  37. 1.3)    [REDHAT] 为什么我缺少 libdl 和 dlfcn.h 时会有麻烦?

  38.         这表明它在编译的最后阶段不能链接到象 dlopen(),dlclose() 等函数上

  39.         libdl 库是用于在运行时动态链接用户支持函数的。
  40.         由于某种原因,这个库在 Redhat 的发布中漏了。
  41.         好象最新的 Redhat 4.0 版本(Colgate,译注:太老了,现在估计大家都没事了。)已经打了补丁。

  42.         RedHat 在他们的 FTP 站上有一个新的 ld.so RPM 包。
  43.         只需要抓取:

  44.                 ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/ld.so-1.7.14-4.i386.rpm

  45.         用通常的方法安装这个 RPM 文件,你就能用了!

  46.         注意!你在安装完这个库以后,在编译前不用重新运行 configure 和进行 make clean

  47.         有一次报告说在升级这个库的时候,因为有程序访问这个库而导致系统崩溃
  48.         (一点也不让人奇怪)。因此,在安装新库之前重起系统,并且尽可能少运行程序
  49.         是个好主意。进入单用户模式可能是最好的方法。

  50.         如果你想用难一点的方法做这些事情,你可以从下面站点获取库和头文件:
  51.         
  52.                 ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.7.14.tar.gz

  53.         另外,你可以在下面位置找到预编译的二进制
  54.         distributions/debian/buzz/binary-i386/base/ld.so-1.7.14-4.deb
  55.         在同一个站点,或者按照问题 1.2 给出的指示可以修正 Slackware 3.1 的早期版本
  56.         的同样错误。除非你知道自己在干什么,否则不要用这个方法!



  57. 1.4)    [SLACKWARE 3.1] 为什么我缺少 libdl 和 dlfcn.h 时会有麻烦?

  58.         这表明它在编译的最后阶段不能链接到象 dlopen(),dlclose() 等函数上

  59.         参阅问题 1.3 的回答。Slackware 一直到版本 3.0 都提供了这个库和相应头文件
  60.         并且看起来在最新的版本 3.1 里面好象也有这个库了,但是 3.1 的早期版本(早于
  61.         1996年9月9日)里面缺少这个库而且许多 CD-ROM 版本是用第一个 3.1 版本印制的。

  62.         有一次报告说在升级这个库的时候,因为有程序访问这个库而导致系统崩溃
  63.         (一点也不让人奇怪)。因此,在安装新库之前重起系统,并且尽可能少运行程序
  64.         是个好主意。进入单用户模式可能是最好的方法。

  65.         最简单的修补是从最近的 Slackware 版本的 a4 磁盘获取文件 ldso.tgz
  66.         然后在根(/)目录解包这个文件,再

  67.                 sh install/doinst.sh

  68.         要完成安装。在这个后面做一次

  69.                 ldconfig

  70.         注意!在完成库的安装和重新编译之前,你需要重新运行 configure 和做一次 make clean。

  71.         如果你想手工安装,你首先必须安装文件
  72.         dlfcn.h 到 /usr/include 目录。

  73.         第二,把文件 libdl.so.1.7.14 (或者任何最新的版本)
  74.         安装到 /lib,然后做:

  75.                 cd /lib
  76.                 ln -sf libdl.so.1.7.14 libdl.so.1
  77.                 ln -sf libdl.so.1 libdl.so

  78.         在某些系统上(取决于你的 GCC 的配置),可能还有必要做:

  79.                 cd /usr/lib
  80.                 ln -sf /lib/libdl.so .

  81.         最后

  82.                 ldconfig

  83.         注意!在完成库的安装和重新编译之前,你需要重新运行 configure 和做一次 make clean。


  84. 1.5)    M我编译后端时退出了,并且报错说缺少头文件 dlfcn.h

  85.         参阅问题 1.3/1.4 的回答。如果你使用 a.out 的系统,别忘了你必需首先安装
  86.         dld 包(这个包在大多数 a.out 系统上都没有提供),以获取 dlfcn.h。参阅问题 1.11。


  87. 1.6)    GCC 抱怨说选项 -fpic 被忽略

  88.         早期的 GCC 可以接受 -fpic 或 -fPIC。
  89.         现在的版本的 GCC (V2.7.2?)要求使用 -fPIC。
  90.         如果你正在使用一个 ELF 版本的 Linux,你可以放心的忽略这个选项,因为 -fPIC 是却省的。

  91.         你可以通过编辑 src/Makefile.global 和修改 CFLAGS_SL 来修正这些。


  92. 1.7)    我收到下面形式的警告
  93.         warning: cast from pointer to integer of different size

  94.         这些在早期的 Postgres95 版本中出现并且可以安全的忽略
  95.         PostgreSQL V6.0 应该编译时不带警告,除了那些与系统头文件有关的(
  96.         也可以安全的忽略)。

  97. 1.8)    [SuSE-Linux 4.2-4.4]  curses 和 termcap 在那里?

  98.         SuSE-Linux 4.2 有 ncurses 但没有 curses。4.4 好象两个都有。
  99.         SuSE-Linux 的 termcap 库在 /usr/lib/termcap
  100.         而不是在 /usr/lib。

  101.         PostgreSQL (up to V6.0)
  102.         -----------------------
  103.         把 src/Makefile.custom 里面的 CURSES_LIB 的值设置为 -lncurses
  104.         (或者客户化脚本来做这些事情)。
  105.         向 src/Makefile.custom 文件里面加下面的行:

  106.                 LDADD_BE+= -L/usr/lib/termcap

  107.         你可能要编辑 src/bin/psql/Makefile 然后修改:
  108.                 ifeq ($(PORTNAME), linux)
  109.                    LD_ADD+=
  110.         为:
  111.                 ifeq ($(PORTNAME), linux)
  112.                    LD_ADD+= -ltermcap

  113.         PostgreSQL (V6.1)
  114.         -----------------
  115.         configure 脚本不会到 /usr/lib/termcap 里面查找
  116.         termcap 库,因此,当向你询问附加的搜索路径时,你应该把这个路径声明为
  117.         其中之一。

  118.         如果这些不生效(我手头没有 SuSE 以检验这样的处理是否正确)
  119.         那么在运行完 configure 后,你需要编辑
  120.         src/Makefile.global 并向 LDFLAGS 行增加 -ltermcap(在 -lreadline 之后)。(另外,你也可以
  121.         在运行 configure 之前修改 src/Makefile.custom。)

  122.         有些 SuSE 版本只提供 ncurses,因此你可能需要强制使用
  123.         ncurses 而不是 curses —— 通过把
  124.         -lcurses 改为 -lncurses。(据报告对 SuSE 5.1 有效)


  125. 1.9)    为什么我的 ld.so 有问题?

  126.         如果你碰到 ld.so 的毛病,在 ELF 里面需要另外一个库来动态链接,
  127.         那么你已经把你的安装和(很有可能是)Linux 的升级搞混了。

  128.         参阅问题 1.3/1.4 的回答。你可能需要安装 ld.so.x.y.z 到 /lib 然后运行 ldconfig。

  129.         最近的稳定的 ld 包的版本是 1.7.14。
  130.         在我写作的时候,版本 1.8.x 的 ld 正处在试验阶段。

  131. 1.10)   为什么我收到 `yy_flush_buffer undefined' 错误?

  132.         这个毛病不是 Linux 特有的,但是在老的 Linux 安装里比较常见。
  133.         你必须拥有最近版本的 flex (2.5.2 或更新)来编译
  134.         PostgreSQL。请注意 flex 2.5.3 有一个臭虫:参阅问题 3.4。

  135. 1.11)   我怎样在一个 a.out 系统上编译 PostgreSQL ?

  136.         首先,你必须先安装 dld 库。这些可以在
  137.         Sunsite 获取:
  138.         Linux/libs/dld.3.2.7.tar.gz
  139.         (ftp://sunsite.unc.edu/pub/Linux/libs/dld.3.2.7.tar.gz)

  140.         其次,向你的 src/Makefile.custom 里增加下面一行:
  141.                 LINUX_ELF=
  142.         (或者使用客户化脚本)

  143. 1.12)   为什么制作带着下面信息退出:
  144.         yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y
  145.         make: /usr/bin/make: cannot execute binary file

  146.         这些是早期版本的 Postgres95 的毛病。缺省时
  147.         PostgreSQL 是使用 bison -y 而不是 yacc。

  148.         yacc 通常是通过一个调用 bison -y 的脚本实现的。
  149.         由于某种原因(某个版本的 make? 某个版本的 bash?),make 不能执行这个脚本文件。

  150.         要修补这些,只需要编辑 src/mk/port/postgres.mk.linux
  151.         以及,在该文件的末尾,修改:
  152.                 # YACC = bison -y
  153.         为
  154.                 YACC = bison -y

  155. 1.13)   在 src/Makefile.global 里 X11_LIB 对 libsocket 和 libnsl 的引用在那里?

  156.         这是一个 1.08 里的毛病(那是与 Sun Solaris 相关的)。
  157.         在 1.09 和 6.0 里修补好了。

  158. 1.14)   [DEBIAN] libtermcap 在那里?

  159.         Debian Linux 是不带 termcap 库的,而且使用 ncurses
  160.         (它用 terminfo 代替 termcap)。我们不需要修改
  161.         src/bin/psql/Makefile 里面的 CURSES_LIB 变量,因为 Debian 提供了一个
  162.         从 libncurses 到 libcurses 的链接(不象 SuSE-Linux --- 参阅问题 1.8)。

  163.         你可能需要编辑 src/bin/psql/Makefile 并把下面的行:
  164.                 ifeq ($(PORTNAME), linux)
  165.                    LD_ADD+= -ltermcap
  166.         改成:
  167.                 ifeq ($(PORTNAME), linux)
  168.                    LD_ADD+=


  169. 1.15)   [REDHAT] 我能把 PostgreSQL 做成 RPM 吗?

  170.         当然啦!Michal Mosiewicz (http://www.pdi.lodz.pl/~mimo)已经为大家把
  171.         PostgreSQL V6.0 的 Intel 体系的软件包做成了一个 RPM 上载到了
  172.         ftp://ftp.redhat.org/pub/Incoming/Postgres-6.0-1.i386.rpm

  173.         这是一个预编译的版本,源文件 RPM 在我写作(1997年二月3日)还在制作。

  174. 1.16)  当我试图在 Linux 下编译一个开发版本时,编译带着类似下面的信息退出了:
  175.         In file included from /usr/include/sys/sem.h:8,
  176.                  from ipc.c:37:
  177.         /usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit'
  178.         ....
  179.         make: *** [ipc.o] Error 1

  180.         The problem is that Linux provides no prototypes for these
  181.         inline functions. The solution is to go into the
  182.         .../src/backend/storage/ipc directory and edit the Makefile.
  183.         Change the line
  184.            CFLAGS+=$(INCLUDE_OPT)
  185.         to
  186.            CFLAGS+=$(INCLUDE_OPT) -Wno-error

  187.         Do the same in the ../src/backend/storage/lmgr directory.

  188. 1.17)   当编译 postgres 时,gcc 报告信号 11 并退出。
  189.         More specifically:
  190.            gcc: Internal compiler error: program cc1 got fatal
  191.                 signal 11

  192.         这可能是硬件/内存问题。PortgreSQL 是一个大程序,而大的
  193.         gcc 编译(类似制作 PostgreSQL 或编译内核)象其他几个程序一样
  194.         对内存施加了较高的负荷,导致在平常操作中不出现的错误。轻负荷的
  195.         操作系统不会对硬件有这样高的压力,因此你可能永远不会在 DOS/Window上看到这个毛病。

  196.         关于这个问题的更多信息在:
  197.            http://www.bitwizard.nl/sig11

  198.         通过这个 Sig11 FAQ,好象运行在 Cyrix 处理器上的
  199.         Redhat 5.0 gcc 有特别的问题。参阅上面的 URL 获取更多细节!

  200. 1.18)   我能否在 MkLinux 里安装 6.1.1?

  201.         Tatsuo Ishii 在 MkLinux DR2.1 升级2 里成功完成了这个工作,做了一个小补丁:
  202.         ftp://ftp.sra.co.jp/pub/cmd/postgres/6.1.1/mklinux.patch.gz

  203. 1.19)   为什么制作退出或崩溃?

  204.         有一些人报告说 gmake 要么是提前推出,要么是段错误(seg faulting)。后者被
  205.         发现在 gmake 3.74 上出现 - 升级到 3.76.1 可以解决这个问题。不过,
  206.         3.74 被认为在其他人的安装中工作得很好。简而言之,在报告这个问题之前先
  207.         把 gmake 升级到你能找到的最新版本。

  208. 1.20)   我如何为 486 或 pentium 处理器做优化?

  209.         缺省的编译选项不会对 486 或 Pentium 处理器做任何优化。要增加这样的优化,
  210.         编辑 Makefile.custom,并且增加一行:

  211.            CFLAGS+= -m486

  212.         或(对于大多数人还没有开始使用的新的编译器)

  213.            CFLAGS+= -mpentium
  214.         或
  215.            CFLAGS+= -mpentiumpro

  216. 1.21)   为什么我打印时间时会得到奇怪的结果(例如在蜕变测试 'timespan' 时)?
  217.         时间显示为:'4 hours 59 mins 60.00 secs'
  218.         而不是 '5 hours'

  219.         这是 Redhat 5.0 附带的 glibc2 库的问题。
  220.         对于 v5.0/hurricane 把你的 glibc 升级为最新 RedHat 版本。
  221.         任何早于 glibc-2.0.7 的库都可能有这个错误。
  222.         
  223. 1.22)   为什么我编译 6.3.2 时为什么我没有生成任何 libqp 的共享库?

  224.         v6.3.2 的 Linux 配置有一些最后阶段的破损。
  225.         参阅 ftp://postgresql.org/pub/patches/ 获取几个补丁,
  226.         包括一个 linux_elf 补丁。

  227. 1.23)   为什么编译失败,并且说 F_BOOLIN,F_BOOLOUT 和 F_BYTEAIN 未定义?

  228.         实际的信息象下面的东西:

  229.         -I/usr/include/readline -O2 -Wall -Wmissing-prototypes -I..
  230.         -Wno-error -c bootstrap.c -o bootstrap.o
  231.         bootstrap.c:160: `F_BOOLIN' undeclared here (not in a function)
  232.         bootstrap.c:160: initializer element for `Procid[0].inproc' is not
  233.         constant
  234.         bootstrap.c:160: `F_BOOLOUT' undeclared here (not in a function)
  235.         bootstrap.c:160: initializer element for `Procid[0].outproc' is not
  236.         constant
  237.         bootstrap.c:161: `F_BYTEAIN' undeclared here (not in a function)
  238.         bootstrap.c:161: initializer element for `Procid[1].inproc' is not
  239.         constant

  240.         这是一个陷阱,除非你知道为什么会发生这些事情,因为这些常量好象在任何地方都
  241.         没有定义。

  242.         解决方法是在你开始制作前确保 cpp 包含在你的路径里。

  243.         在 Redhat 5.1,cpp 在 /usr/lib/gcc-lib/i386-redhat-linux/2.7.2.3



  244. ----------------------------------------------------------------------
  245. 第一节:      编译附加的程序
  246. ----------------------------------------------------------------------

  247. 2.1)    在编译 pgtclsh 时,链接器没有找到 libX11

  248.         向 src/Makefile.custom 增加下面一行
  249.                 X11_LIBDIR = /usr/X11R6/lib


  250. ----------------------------------------------------------------------
  251. 第二节:      运行时问题
  252. ----------------------------------------------------------------------

  253. 3.1)    在运行象 createuser 这样的脚本时,我收到一个错误,说 _fUnKy_POSTPORT_sTuFf_ 未定义

  254.         在 Postgres V1.06-V1.07 里面有一个臭虫,在 V1.08 及以上版本被修补了。

  255. 3.2)    我运行 postmaster 然后系统告诉我 'Bad system call(Core dumped)'(系统调用错误(内核倾倒))

  256.         着表明你没有在你的内核里面编译进共享内存支持。你需要重新编译 Linux 内核并增加这个特性。


  257. 3.3)    当我试图启动 Postmaster,为何我会收到下面形式的错误信息
  258.         Failed Assertion("!(file != 0):(null)", File:
  259.         "/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257)
  260.         !(file != 0) (0)
  261.         initdb: could not create template database
  262.         initdb: cleaning up.

  263.         你对文件 /dev/null 的权限不够。

  264.         ls -l /dev/null 应该显示类似下面的东西:

  265.                 crw-rw-rw-  1 root  wheel    2,   2 Oct  8 18:41 /dev/null

  266.         用下面的命令修正权限:

  267.                 chmod a+rw /dev/null

  268. 3.4)    为什么 createuser 不管用?

  269.         版本 2.5.3 的 GNU flex 和 createuser 有问题。
  270.         你可以把 flex 的版本降为 V2.5.2,升为 V2.5.4,
  271.         或者对 V2.5.3 应用在 doc/README.flex 里面写出的补丁。
  272.         你可以从下面站点获取 V2.5.4
  273.         ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz

  274. 3.5)    为什么我会收到下面这样的信息:
  275.         IpcMemoryCreate: memKey=155356396 , size=760632 ,
  276.         permission=384IpcMemoryCreate: shmget(..., create, ...)
  277.         failed: Invalid argument

  278.         你的 Linux 内核没有 IPC 支持。你必须重新编译内核
  279.         并打开这个选项。

  280. 3.6)    为什么 psql 带着下面的错误信息失效了:
  281.         psql: can't load library 'libpq.so.1'

  282. Psql 被编译成动态地与 libpq 库进行联接。

  283. 要解决这个问题,你应该以 root 身份登陆并且编辑文件
  284. /etc/ld.so.conf
  285. 在该文件最后增加一行,给出 PostgreSQL 库目录的名称
  286. (你的 PostgreSQL 安装的 lib 子目录的名称)然后运行
  287. /sbin/ldconfig -v

  288.         另外,(也是在你没有 root 权限的情况下),你可以使用
  289.         LD_LIBRARY_PATH 环境变量。

  290.         LD_LIBRARY_PATH 变量包含一个冒号分隔的共享库搜索路径列表。
  291.         这个列表在 ldconfig 声明的库(路径)之前首先被搜索。

  292.         因此在 Bash 里,你将做类似下面的设置:
  293.                 export LD_LIBRARY_PATH='PathToPGSQL'/lib
  294.         或者,如果你使用 tcsh
  295.                 setenv LD_LIBRARY_PATH 'PathToPGSQL'/lib
  296.         把 'PathToPGSQL' 你的 PostgreSQL 的正确的顶级路径

  297.         请注意,你可以对一个动态链接的可执行文件使用 ldd 列出该可执行文件
  298.         所依赖的所有共享库


  299. 3.7)    其他奇怪的表现

  300.         我不知道如果没有一样东西工作正常是什么症状,不过有人曾指出我们要
  301.         注意让动态装载器装载正确版本的 libpq 库。如果你在库路径里面存在旧版本的库
  302.         (例如在 /usr/lib),那么有可能装载这些旧库,而不是你想装载的新库。确保
  303.         你已经把它们删除了并且参照问题 Q3.6 获取关于装载库的详细信息。

  304. 3.8)    当 PostgreSQL 运行时宕掉系统,重起时 Linux 总是对磁盘进行 fsck。

  305.         有一些人报告说出现这个现象,并且看起来这是因为人们按照 INSTALL
  306.         文档建议的那样通过 /etc/inittab 运行 PostgreSQL 的原因。

  307.         因此我们建议你通过一个 rc 脚本来运行 postmaster。在一个类似 Slackware 的版本里,
  308.         你要修改 /etc/rc.d/rc.local 以启动 postmaster。在一个类似 RedHat 的版本里,
  309.         你要在 /etc/rc.d/rc3.d 里以 /etc/rc.d/init.d 骨架文件为基础创建一个 SysV 风格
  310.         的脚本。

  311.         有一个在 contrib/linux/postgres.init 里的例子脚本

  312.         下面是另外一个 John Robinson 提供的另外一个例子文件,
  313.         你要根据需要做一定的修改:

  314. #!/bin/sh
  315. #
  316. # postgreSQL.init This shell script takes care of starting and stopping
  317. #               the PostgreSQL postmaster.
  318. #

  319. # Source function library.
  320. . /etc/rc.d/init.d/functions

  321. # Source networking configuration.
  322. . /etc/sysconfig/network

  323. # Check that networking is up.
  324. [ ${NETWORKING} = "no" ] && exit 0

  325. # See how we were called.
  326. case "$1" in
  327.   start)
  328.         # Start daemons.
  329.         echo -n "Starting postgres Postmaster daemon:"
  330.         if [ -z "`pidofproc postmaster`" ]
  331.         then
  332.                 su postgres -c "/usr/local/pgsql/bin/postmaster -D /home/postgreSQL/data -p 5432 &"
  333.                 echo -n " postmaster"
  334.         else
  335.                 echo -n " (already running)"
  336.         fi
  337.         echo
  338.         touch /var/lock/subsys/postgres
  339.         ;;
  340.   stop)
  341.         # Stop daemons.
  342.         echo -n "Shutting down postgres Postmaster daemon: "
  343.         killall -TERM postmaster 2>;/dev/null
  344.         killall -TERM postgres 2>;/dev/null
  345.         echo
  346.         rm -f /var/lock/subsys/postgres
  347.         ;;
  348.   *)
  349.         echo "Usage: postgres {start|stop}"
  350.         exit 1
  351. esac

  352. exit 0



  353. 3.9)    为什么蜕变测试中 Query 32 用了很长时间?

  354.         这是一个只有 linux 机器里才跳出来的蜕变脚本的臭虫。
  355.         据我所知有两个绕过去的办法
  356.         (是 Tatsuo Ishii 告诉我的):

  357.         1. 修改 regress.sh 里下面的行:
  358.                 time postgres -texecutor -tplanner -Q bench  & bench.out.perquery



  359. 3.10)   为什么在一些日期/时间运算中我得到一些有趣的圆整?例如
  360.            select '4 hours'::timespan;
  361.         returning '3 hours 59 minutes 60 seconds'?

  362.         你正使用新的 glibc2 库,而且版本早于 2.0.7。这是一个该库的数学圆整问题。升级你的库。
复制代码

论坛徽章:
0
3 [报告]
发表于 2003-06-16 16:19 |只看该作者

linux编程FAQ(1)

要是能排一下版就好了,这样子看好累!!!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2003-06-16 16:28 |只看该作者

linux编程FAQ(1)

已经做了排版。thanks!

论坛徽章:
0
5 [报告]
发表于 2003-06-16 18:22 |只看该作者

linux编程FAQ(1)

不错的说,顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP