为 Phusion Passenger 3 提供 SSL 支持的 Curl 开发标头

为 Phusion Passenger 3 提供 SSL 支持的 Curl 开发标头

你好,当我运行passenger-install-apache2-module时,我得到:

正在检查所需软件...

  • GNU C++ 编译器...位于 /opt/csw/gcc4/bin/g++
  • 未找到支持 SSL 的 Curl 开发标头...

我按照这个教程操作http://www.darkaslight.com/blog/entry/50-Installing-Phusion-Passenger-on-Solaris并且我修复了除 Curl 和 SSL 标头之外的所有依赖项。

答案1

无需像原始问题中 darksaslight.com 链接中所述那样使用 CRLE 进行任何技巧。事实上,如果您已经这样做了,我会尝试删除所有更改。构建技术修复了库中的 RUNPATH,因此它知道在各个 /opt/csw/lib 目录中查找,而无需任何 LD_LIBRARY_PATH 或 crle 调整。

除了基础的 ruby​​ 包之外,您还需要以下 OpenCSW 包:

  • ruby18_dev
  • libidn_dev
  • libcurl_dev
  • 红宝石
  • gcc4g++
  • ruby18_gcc4
  • apache2_dev

libidn_dev 并不明显,因为安装程序脚本“有帮助地”隐藏了它运行的测试编译命令的输出。我通过查看 truss 的输出找到了它,并发现由于缺少库而导致链接器错误。

您需要以 root 身份或在 sudo 下运行以下命令。我在所有命令前都添加了 sudo。

安装机架和乘客宝石:

/opt/csw/bin/gem install rack
/opt/csw/bin/gem install passenger

然后使用此命令开始编译:

PATH=/opt/csw/bin:$PATH /opt/csw/bin/passenger-install-apache2-module --apxs2-path /opt/csw/apache2/sbin/apxs --auto

一旦开始,您可能会看到如下错误:

In file included from /usr/include/sys/types.h:18:0,
                 from ext/common/AccountsDatabase.cpp:26,
                 from ext/apache2/module_libpassenger_common/aggregate.cpp:5:
/opt/csw/lib/gcc/sparc-sun-solaris2.10/4.6.2/include-fixed/sys/feature_tests.h:341:2: error: #error "Compiler or options invalid for pre-UNIX 03 X/Open applications    and pre-2001 POSIX applications"
rake aborted!
Command failed with status (1): [g++ -Iext -Iext/common -Iext/libev -fPIC -...]

您可以通过编辑 /opt/csw/lib/ruby/gems/1.8/gems/passenger-3.0.11/lib/phusion_passenger/platform_info/compiler.rb 并从其中一个标志语句中清除“-D_XOPEN_SOURCE=500”来修复该问题。如下所示:

                if RUBY_PLATFORM =~ /solaris/                                                                                                                                                            
                    flags << '-pthreads'                                                                                                                                                             
                    #flags << '-D_XOPEN_SOURCE=500 -D_XPG4_2 -D__EXTENSIONS__ -D__SOLARIS__ -D_FILE_OFFSET_BITS=64'
                    flags << '-D_XPG4_2 -D__EXTENSIONS__ -D__SOLARIS__ -D_FILE_OFFSET_BITS=64'
                    flags << '-DBOOST_HAS_STDINT_H' unless RUBY_PLATFORM =~ /solaris2.9/                                                                                                              
                    flags << '-D__SOLARIS9__ -DBOOST__STDC_CONSTANT_MACROS_DEFINED' if RUBY_PLATFORM =~ /solaris2.9/
                    flags << '-mcpu=ultrasparc' if RUBY_PLATFORM =~ /sparc/

这将带你到这里:

In file included from ext/common/LoggingAgent/LoggingServer.h:48:0,
                 from ext/common/LoggingAgent/Main.cpp:43:
ext/common/LoggingAgent/../EventedMessageServer.h: In member function 'void Passenger::EventedMessageClient::writeArrayMessage(const char*, ...)':
ext/common/LoggingAgent/../EventedMessageServer.h:95:45: error: 'alloca' was not declared in this scope
ext/common/LoggingAgent/../EventedMessageServer.h: In member function 'void Passenger::EventedMessageClient::writeArrayMessage(Passenger::StaticString*, unsigned int)':
ext/common/LoggingAgent/../EventedMessageServer.h:118:41: error: 'alloca' was not declared in this scope
rake aborted!
Command failed with status (1): [g++ ext/common/LoggingAgent/Main.cpp -o ag…]

为了解决这个问题,请再次编辑 /opt/csw/lib/ruby/gems/1.8/gems/passenger-3.0.11/lib/phusion_passenger/platform_info/compiler.rb,并添加如下行:

flags << '-I/usr/include'

在“if RUBY_PLATFORM =~ /solaris/”之后。这与上面的编辑部分相同。

还更换了线路

flags << '-DHAS_ALLOCA_H' if has_alloca_h?

flags << '-DHAS_ALLOCA_H_' if has_alloca_h?

注意 ALLOCA_H 末尾的附加下划线

相关内容