- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
检查(最新)标签 v3.2.1 后:
% sh autogen.sh
% ./configure CC=i686-pc-mingw32-gcc
% make check
所有测试似乎都失败了。
使用 CC=gcc,测试似乎工作正常。不幸的是,我需要生成的构建没有 cygwin 依赖项,因为我正在构建 JNI DLL。
最佳答案
我尝试使用 MSYS2 环境和 mingw-w64
构建 libffi
,但我遇到了同样的问题:
a) 当我运行 make check
b) 当我尝试使用 -lffi
编译 libffi
Hello World 示例时, 链接器提示对所有 ffi 相关符号的未解析引用(这些符号确实包含在 libffi.a 中,但可能由于循环依赖和目标文件的顺序,链接器无法收集所有符号)
幸运的是,如果我删除 -lffi
并转而包含 libffi 创建的所有目标文件 (*.o
) make
操作,创建的可执行文件运行得很好。
这是我使用的 libffi Hello World 示例的链接: http://www.chiark.greenend.org.uk/doc/libffi-dev/html/Closure-Example.html
[编辑]
经过一些额外的实验,我成功地通过用 -Wl,--whole-archive,-lffi,--no-whole- 替换
。这样,链接器将包含来自 -lffi
来编译程序存档libffi.a
的所有目标文件,并且一切都会正常工作。
这是Hello World示例(hello.c
),其中包含我使用的详细步骤,以防有人发现此信息有用:
/*
* Steps for building libffi on Windows and running this Hello World example:
*
* 1. Download and install the latest version of MSYS2
* a) download the latest (64-bit or 32-bit) installer from http://msys2.github.io
* b) run the installer accepting default settings
* c) execute the following commands to update the system core
* pacman -Sy pacman
* pacman -Syu
* pacman -Su
* d) restart MSYS2, if requested to do so
* e) execute the following command to install development tools
* for 64-bit gcc:
* pacman --needed -S base-devel dejagnu mingw-w64-x86_64-gcc
* for 32-bit gcc:
* pacman --needed -S base-devel dejagnu mingw-w64-i686-gcc
* f) restart MSYS2
* 2. Download and compile the latest version of libffi
* a) download the latest source code bundle from https://github.com/libffi/libffi/releases
* b) unpack the source code bundle in MSYS2 tmp directory (e.g. C:\msys64\tmp)
* c) execute the following MSYS2 commands to compile libffi (adapt the version number):
* cd /tmp/libffi-3.2.1
* ./autogen.sh
* ./configure --prefix=/tmp/out --enable-static --disable-shared
* make
* d) optionally, execute the following command to run the tests:
* make check
* e) copy the distributable files to the configured /tmp/out directory
* make install
* the following files are needed for the next step:
* /tmp/out/lib/libffi.a
* /tmp/out/lib/libffi-3.2.1/include/ffi.h
* /tmp/out/lib/libffi-3.2.1/include/ffitarget.h
* 3. Compile this example
* a) copy this file to MSYS2 tmp directory (e.g. C:\msys64\tmp\hello.c)
* b) execute the following MSYS2 command to compile the example:
* gcc -I /tmp/out/lib/libffi-3.2.1/include -L /tmp/out/lib -lffi -o /tmp/hello /tmp/hello.c
* c) run the example (/tmp/hello.exe), the output should be:
* Hello World!
*
* Troubleshooting
*
* If the tests seem to fail and the compilation in step 3b) above reports undefined references to 'ffi_*' symbols,
* try compiling using the following command instead:
* gcc -I /tmp/out/lib/libffi-3.2.1/include -L /tmp/out/lib -Wl,--whole-archive,-lffi,--no-whole-archive -o /tmp/hello /tmp/hello.c
* Another alternative is to try linking the original libffi object files (*.o) and drop -lffi as follows:
* For 64-bit version:
* export SRC=/tmp/libffi-3.2.1/x86_64-w64-mingw32/src
* gcc -I /tmp/out/lib/libffi-3.2.1/include -o /tmp/hello /tmp/hello.c $SRC/prep_cif.o $SRC/types.o $SRC/raw_api.o $SRC/java_raw_api.o $SRC/closures.o $SRC/x86/ffi.o $SRC/x86/win64.o
* For 32-bit version:
* export SRC=/tmp/libffi-3.2.1/i686-w64-mingw32/src
* gcc -I /tmp/out/lib/libffi-3.2.1/include -o /tmp/hello /tmp/hello.c $SRC/prep_cif.o $SRC/types.o $SRC/raw_api.o $SRC/java_raw_api.o $SRC/closures.o $SRC/x86/ffi.o $SRC/x86/win32.o
*/
#include <stdio.h>
#include <ffi.h>
/* Acts like puts with the file given at time of enclosure */
void puts_binding(ffi_cif* cif, void* ret, void* args[], void* stream) {
*(ffi_arg*) ret = fputs(*(char**) args[0], (FILE*) stream);
}
typedef int (*puts_t)(char*);
int main() {
ffi_cif cif; /* The call interface */
ffi_type* args[1]; /* The array of pointers to function argument types */
ffi_closure* closure; /* The allocated closure writable address */
void* bound_puts; /* The allocated closure executable address */
int rc; /* The function invocation return code */
/* Allocate closure (writable address) and bound_puts (executable address) */
closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts);
if (closure) {
/* Initialize the array of pointers to function argument types */
args[0] = &ffi_type_pointer;
/* Initialize the call interface describing the function prototype */
if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ffi_type_sint, args) == FFI_OK) {
/* Initialize the closure, setting stream to stdout */
if (ffi_prep_closure_loc(closure, &cif, puts_binding, stdout, bound_puts) == FFI_OK) {
rc = ((puts_t) bound_puts)("Hello World!");
/* rc now holds the result of the call to fputs */
}
}
}
/* Deallocate both closure, and bound_puts */
ffi_closure_free(closure);
return 0;
}
关于cygwin - 如何使用 mingw32 在 cygwin 下构建和测试 libffi?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31643262/
我已经创建了一个Python应用程序,并使用Pyinstaller将其构建到Unix可执行文件中。在我尝试对应用程序进行代码签名之前,应用程序运行得很好。在代码签名之后,我在尝试运行可执行文件时收到以
我尝试在 RHEL 上安装 libffi-devel,但是当我尝试时收到此消息: Transaction Check Error: package libffi-3.0.5-1.el5.6.z.x
我正在尝试使用 libffi 在 macos (10.11) 上访问 stat()。这是 SWI-Prolog 的新的基于 FFI 的外部接口(interface)的一部分。此接口(interface
我在使用英特尔编译器 (11.1) 构建带有 ctypes 的 Python 工作版本时遇到问题。问题是,ctypes 模块下的 libffi 在与例如接口(interface)连接时无法正常工作。
我的印象是 CFFI 不能按值传递结构,但 CFFI 文档说: To pass or return a structure by value to a function, load the cffi-
我在 VirtualBox 上运行 32 位 Ubuntu 12.04。我一直在尝试让 pypy 工作,这太令人沮丧了。我下载了二进制文件,当我尝试运行它时出现此错误 kimberly@kimberl
我正在尝试使用 GCC 为 Cortex-M3 处理器构建外部函数接口(interface)库。根据http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
我需要在我的 Heroku 服务器上运行 libffi-dev 来编译我正在使用的一些包。如何在 Heroku 上安装这样的依赖项? 最佳答案 我从未这样做过,但我认为自定义二进制构建包在这种情况下可
我需要 libffi 来构建我的 C++ 项目。问题是不存在用于查找 libffi 的预制脚本,并且 ffi.h 位于奇怪的位置,具体取决于库的版本和 Linux 发行版。 这是我的尝试: # Loo
yum install libffi-devel 这是错误消息: Error downloading packages: libffi-devel-3.0.13-16.el7.x86_64: [Err
我正在尝试在 Elastic Beanstalk 上设置 Flask 应用程序。其中一个依赖项是 cffi。当我查看错误日志时,我得到了 same error as in this question
我无法确定这段代码崩溃的原因: #define MACOSX #include #include #include #include void sum(int64_t *a, int64_t
我尝试安装 libffi-3.0.11 我跟着那一边 http://www.linuxfromscratch.org/blfs/view/svn/general/libffi.html 但是我收到了这
我正在尝试将我的应用程序部署到 Heroku。它使用 pyOpenSSL,这需要 cryptography,这需要 libffi。我在这里找到了一个包含 libffi 的自定义构建包:https://
这个回溯弄乱了我所有的程序,我仍然无法修复它我已经尝试了所有方法,但没有帮助! 这是问题所在: ffi_prep_closure(): bad user_data (it seems that the
检查(最新)标签 v3.2.1 后: % sh autogen.sh % ./configure CC=i686-pc-mingw32-gcc % make check 所有测试似乎都失败了。 使用
我正在尝试使用 libffi在我的一个项目中,但我似乎无法为 iOS(或 macOS,就此而言)进行编译。这是我在为 iOS 模拟器构建时遇到的各种错误之一: bash: src/arm/gentra
我需要编译 libffi 库以在 Visual Studio 2013 项目中使用它。 我正在使用 libffi 3.0.13,从他们的网站下载 original page 我一直在努力让它工作,按照
我已经在我的 Linux 服务器上安装了 libffi 并且正确地将 PKG_CONFIG_PATH 环境变量设置为正确的目录,因为 pip 认识到它已安装;但是,当尝试安装 pyOpenSSL 时,
我正在尝试在我的 Android 手机上运行 Buildozer。为此,我在 Termux App (Android 7)(redmi Note 4) 上使用 Arch Linux pRoot 由于
我是一名优秀的程序员,十分优秀!