小编Ale*_*ach的帖子

如何在Mac OS X Mountain Lion上编译可分发的Fortran二进制文件?

由于Apple已停止使用Xcode分发gfortran,我应该如何编译独立于架构的Fortran代码?我安装了Mac OS X Mountain Lion(10.8)和XCode 4.4,并安装了Command Line Tools软件包.

Apple的Native编译器

据我所知,Xcode C/C++/ObjC编译器使用GNU编译器集合的fork ,llvm作为后端; 后者我认为可以为英特尔和PPC架构编译和优化"通用"二进制文件.

第三方二进制Fortran编译器

HPC

我只找到一个网站,专门为Mountain Lion分发一个二进制版本的gfortran:HPC网站.但是,我没有把它编译成SciPy,后来在SciPy的自述文件中看到它"已知会产生错误的scipy二进制文件".

CRAN/R

SciPy推荐的(免费)Fortran编译器是CRAN R服务器上的编译器,但尚未针对Mountain Lion进行更新.它们提供了构建通用编译器的说明和脚本,但同样,尚未针对Mountain Lion更新它.

G95

G95项目一直没有自2010年以来的更新,所以我没有尝试..任何人试图在此山狮?

MacPorts的

我想这将是安装gfortran的最简单的方法,但是port search gfortran没有任何结果,而且我过去对MacPorts没有任何喜悦(对MacPorts没有任何冒犯;它看起来像一个非常活跃的项目,但我已经被Linux软件包管理员宠坏了,我最喜欢的经理是aptitude)所以在Mac OS X上,我从过去的源代码编译了软件和库.从来没有一个问题'直到现在......

构建Fortran编译器

在过去的几天里,我在互联网上挖了很多东西,我找到了其他的Fortran编译器,但我没有得到任何交叉编译通用二进制文件,或编译SciPy.

GCC - Gnu编译器集合

我编译了整个GCC集合(v4.6.3),包括autotools,automake,libtool和m4​​ - 就像GCC wiki这个博客描述的那样 - 但是由此产生的编译器没有编译通用二进制文件,可能是因为LLVM没有被用作后端.

DragonEgg

DragonEgg是一个"gcc插件,取代了GCC的优化器和代码生成器......与LLVM".这看起来很有趣,但我不知道我怎么会用它来编译"LLVM-gfortran-4.x版".可以这样做吗?

兼容性

图书馆

Xcode附带的编译器是(C的一个分支)GCC v4.2.但GCC目前的发布和开发分支机构分别是版本4.6和4.7.显然,GNU许可证的更改或某些东西阻止了Apple更新到更现代版本的GCC.那么,如果我要构建使用GCC的gfortran v4.6制作的动态库,那么它们是否可以与Xcode的本机编译器编译的C代码链接?至少,我认为产生的Mach-O二进制文件需要x86_64和i386代码路径.GCC是否向后兼容Apple的(forks of?)GCC?我知道gfortran有-ff2c旗帜,但这两个版本是否稳定?

编译标志

我从源代码构建的GCC Fortran编译器不支持使用 …

gfortran scipy xcode4.4 osx-mountain-lion

11
推荐指数
1
解决办法
1万
查看次数

如何将Apache URI重写/代理到侦听特定端口/服务器的应用程序?

他们说Apache的mod_rewrite是URL操纵的瑞士军刀,但它能做到吗?

假设我想在我的Apache网络服务器中添加一个新的应用程序,其中该应用程序唯一可配置的选项是端口号.

我想使用&提供" http://hostname.example.com/app " 形式的网址,而不是" http://hostname.example.com:8080 ".这将确保客户也能通过该机构的防火墙,而且通常更整洁.

我的应用程序包括php,javascript和css中的绝对URI,因此我想将自己的根位置添加到应用程序内部链接中的URI.我无法访问DNS记录,因此无法创建另一个基于名称的虚拟服务器.

使用Apache的mod_rewrite和mod_proxy模块,我可以透明地将客户端重定向到应用程序的正确主页.但该主页中的链接并未将客户端指向相对于新基本URL的链接.

那么,将请求代理到正在侦听特定端口的应用程序的最佳方法是什么?

例如,如果我有一个应用程序侦听端口8080,我可以把它放在我的Apache配置中: -

<VirtualHost *:80>
    SSLProxyEngine On
    ServerName myhost.example.com
    RewriteEngine On
    UseCanonicalName On
    ProxyVia On
    <Location "/application">
        RewriteRule ^/application/?(.*) http://localhost:8080/$1 [P,L]
    </Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

如果应用程序不使用绝对URL,这可以正常工作,但确实如此.我需要做的是重写应用程序的css,javascript和php返回的URL.

我查看了ProxyPass和ReverseProxyPass文档,但我认为这些不会起作用..?

我也遇到过Nick Kew的mod_proxy_html,但这并没有包含在标准的Apache发布版中,而且我的机构的网络服务器似乎没有它好多年..除了手动拖网(或使用grep -r | sed)通过应用程序的源代码,或使用此第三方加载项,类型表达式,还有其他方法可以解决这个问题吗?

我可以在mod_rewrite规则中使用一些内部服务器变量吗?例如,基于'HTTP_REFERER'的重写规则?

apache mod-rewrite port mod-proxy

10
推荐指数
1
解决办法
3万
查看次数

优化boost :: python :: object实例

我最近开始使用Boost的Python库来包装一个相当大的C++库的一部分.

很偶然,我发现Boost Python创建的每个Python对象至少比Python List的大小要大.

简单的类型

使用noddy_NoddyType例如C-Python的API文档,我可以很容易地露出新对象类型实例,noddy_NoddyObject.

使用原始C-Python API,这与自定义Python对象一样小而简单: -

>>> import noddy, sys

>>> print sys.getsizeof( noddy.Noddy )   # PyTypeObject size?
872
>>> print sys.getsizeof( noddy.Noddy() ) # PyObject size
16
Run Code Online (Sandbox Code Playgroud)

并与基础对象进行比较: -

>>> print sys.getsizeof( object )
872
>>> print sys.getsizeof( object() )
16
Run Code Online (Sandbox Code Playgroud)

这是预期的,但是当我noddy_NoddyObject使用Boost Python 公开时呢?

>>> print sys.getsizeof( noddy.Noddy )
904
>>> print sys.getsizeof( noddy.Noddy() )
80
Run Code Online (Sandbox Code Playgroud)

说什么?!!那不太理想......对象实例比它们需要的大5倍!

(这在非64位计算机上会有所不同.)

在Boost Python维基上,有一些额外膨胀的解释: - …

c++ python numpy boost-python python-c-extension

5
推荐指数
0
解决办法
528
查看次数

Boost.Python - 如何重新输入模块范围?

我向Python公开了一些嵌套enum的C++类.查看boost.orgwiki.python.org上的示例文档,我无法看到在输入范围后如何离开范围,以便返回到全局/模块范围.相反,每个后续范围都嵌套在前一个范围内.

举个例子:

#include <boost/python.hpp>

class Foo
{
public:
    enum Choose { eFoo, eBar };

    /* Default constructor with enum as required argument */
    Foo(Choose choice): m_choice(choice) {}
    ~Foo() {}

    Choose get() const { return m_choice; }

private:
    const Choose m_choice;

};


class Bar
{
};

BOOST_PYTHON_MODULE(foo)
{
    using namespace boost::python;
    scope global;

    /* Define Foo class, and a scope to go with it. */
    scope in_Foo = class_<Foo>
        ("Foo", init<Foo::Choose>())
        .def("rovalue", &Foo::get)
        ;

    /* …
Run Code Online (Sandbox Code Playgroud)

c++ python scope boost-python

1
推荐指数
1
解决办法
1266
查看次数