由于Apple已停止使用Xcode分发gfortran,我应该如何编译独立于架构的Fortran代码?我安装了Mac OS X Mountain Lion(10.8)和XCode 4.4,并安装了Command Line Tools软件包.
据我所知,Xcode C/C++/ObjC编译器使用GNU编译器集合的fork ,llvm作为后端; 后者我认为可以为英特尔和PPC架构编译和优化"通用"二进制文件.
我只找到一个网站,专门为Mountain Lion分发一个二进制版本的gfortran:HPC网站.但是,我没有把它编译成SciPy,后来在SciPy的自述文件中看到它"已知会产生错误的scipy二进制文件".
SciPy推荐的(免费)Fortran编译器是CRAN R服务器上的编译器,但尚未针对Mountain Lion进行更新.它们提供了构建通用编译器的说明和脚本,但同样,尚未针对Mountain Lion更新它.
在G95项目一直没有自2010年以来的更新,所以我没有尝试..任何人试图在此山狮?
我想这将是安装gfortran的最简单的方法,但是port search gfortran没有任何结果,而且我过去对MacPorts没有任何喜悦(对MacPorts没有任何冒犯;它看起来像一个非常活跃的项目,但我已经被Linux软件包管理员宠坏了,我最喜欢的经理是aptitude)所以在Mac OS X上,我从过去的源代码编译了软件和库.从来没有一个问题'直到现在......
在过去的几天里,我在互联网上挖了很多东西,我找到了其他的Fortran编译器,但我没有得到任何交叉编译通用二进制文件,或编译SciPy.
我编译了整个GCC集合(v4.6.3),包括autotools,automake,libtool和m4 - 就像GCC wiki和这个博客描述的那样 - 但是由此产生的编译器没有编译通用二进制文件,可能是因为LLVM没有被用作后端.
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编译器不支持使用 …
他们说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'的重写规则?
我最近开始使用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位计算机上会有所不同.)
我向Python公开了一些嵌套enum的C++类.查看boost.org和wiki.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)