我正在尝试double-conversion
从Hackage 构建软件包.它构建正常但ghci无法加载它.投诉是:
Loading package double-conversion-0.2.0.0 ... linking ... <interactive>:
/home/me/.cabal/lib/double-conversion-0.2.0.0/ghc-7.0.4/HSdouble-conversion-0.2.0.0.o:
unknown symbol `_ZNK17double_conversion6Double5valueEv'
Run Code Online (Sandbox Code Playgroud)
该nm
输出显示符号是弱:
nm /home/me/.cabal/lib/double-conversion-0.2.0.0/ghc-7.0.4/HSdouble-conversion-0.2.0.0.o \
| grep _ZNK17double_conversion6Double5valueEv
00000000 W _ZNK17double_conversion6Double5valueEv
Run Code Online (Sandbox Code Playgroud)
这是文件中唯一的弱符号,实际上,据我所知,在GHC编译的软件包的整个世界中.
有问题的函数显然是一个FFI函数,用C++编写并在内联中定义double-conversion/src/double.h
.它不是唯一的内联函数,但只有这一个被标记为弱.
作为一种权宜之计,我已将该功能移到了外线,现在加载了包.但那里显然存在一些问题.为什么这个功能很弱?为什么其他功能不是?ghc应该用弱符号抱怨吗?我应该提交一个错误,如果是这样,谁应该得到它(双转换,gcc,ghc,别人?)
系统数据:Gentoo Linux,gcc-4.4.5,ghc-7.0.4,cabal-1.10.2.0.
写一个模块:
module Foo where
foo = 3.14
Run Code Online (Sandbox Code Playgroud)
编译它:
ghc -c Foo.hs
Run Code Online (Sandbox Code Playgroud)
加载它:
ghci -ignore-dot-ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :l Foo
[1 of 1] Compiling Foo ( Foo.hs, interpreted )
Ok, modules loaded: Foo.
Run Code Online (Sandbox Code Playgroud)
为什么GHCi不会选择编译代码?这是GHCi中的错误吗?
我试着跑-v
,不太有帮助.
更新
我发现,如果编译模块GHCi -fobject-code Foo
,GHCi将随后加载编译版本,即使没有-fobject-code
.
更新2
这一切都发生在Linux机器上的Ghc 7.8上.Windows机器上的Ghc 7.6不会出现此问题.
我试图将两个代码体集成到同一个进程中,每个进程以前都为各自的 GUI 工具包提供独立的事件循环——其中一个使用 Xt,另一个使用 Qt5。目的只是为了能够显示 Qt 子窗口,而不是像现在已经不复存在的 Qt/Motif 集成扩展那样实现完全集成。
我已经能够构建一个使用标准 Qt 事件循环运行的粗略原型,带有将 XCB 事件转换为 XEvents 的本机事件过滤器(使用 XESetWireToEvent + 其处理程序从 xEvents / X11 线格式转换)。然后它使用 XtDispatchEvent() 将这些 XEvent 直接分派到 Xt。此时,我可以运行该程序,并在同一个程序中创建 Xt/Motif 小部件和 Qt 小部件,使用菜单,绘制 2D 图形,并同时使用 Qt 和 Motif 小部件。
我遇到的问题是,在创建新的 Motif 对话框时会有很长的延迟。我已经将其追溯到 libXt 中的 _XtWaitForSomething(),最终归结为 X 服务器连接套接字上的 select() 或 poll()。对 _XtWaitForSomething() 的调用是 XtManageChild() 内部发生的窗口布局管理的结果。_XtWaitForSomething() 似乎正在检查事件队列中是否有待处理的事件。
我有几个问题:
当在同一个程序中同时使用 XCB 和 libX11 调用(使用 XCB 作为事件队列主控器)时,我是否可以期望来自经典 Xlib 的调用也能正常工作——例如通过 libX11 调用将事件发布到 XCB 事件队列,或者确定是否有通过旧的 libX11 调用在 XCB 事件队列中挂起的任何事件?
为什么 XtManageChild() 最终会阻塞 libXt 中的 _XtWaitForSomething()?看起来它可能正在等待几何更改事件。有趣的是,Qt 的平台层在单独的线程中读取 XCB …
此错误消息不是未知的,我已经重新安装了许多软件包,但到目前为止尚未找到解决方案。
我从命令中收到以下错误 pip install cryptography
/usr/include/python2.7/pyport.h:849:2: error: #error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)."
#error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)."
^
Run Code Online (Sandbox Code Playgroud)
在长回溯结束时,它说:
distutils.errors.DistutilsError: Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip_build_root/cryptography/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-xXOpFq-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /tmp/pip_build_root/cryptography
Storing debug log for failure in /root/.pip/pip.log
Run Code Online (Sandbox Code Playgroud)
python-dev,python2.7-dev和python3-dev存在。
我正在使用 boost::python 导出一些需要void*
. 他们在内部将其解释为原始内存(字节数组)。想read
和write
一些非常特殊用途的装置。
如何将 Python 传递bytearray
给这样的函数?
我试过使用,ctypes.c_void_p.from_buffer(mybytearray)
但这与函数的签名不匹配。
这是最小的例子:
#include <boost/python.hpp>
void fun_voidp(void*) {}
BOOST_PYTHON_MODULE(tryit) {
using namespace boost::python;
def("fun_voidp", fun_voidp);
}
Run Code Online (Sandbox Code Playgroud)
在蟒蛇方面:
import tryit
import ctypes
b = bytearray(100)
tryit.fun_voidp(b) # fail
tryit.fun_voidp(ctypes.c_void_p.from_buffer(b)) # fail
tryit.fun_voidp(ctypes.c_void_p.from_buffer(b).value) # fail
Run Code Online (Sandbox Code Playgroud) 我知道普通的State
作品(编辑:显然不是!).
如果我需要创建一个数组,并且不方便一次创建整个数组,我可以创建一个STArray
,填充它,然后冻结并返回一个普通的不可变数组给用户.
现在假设我需要同时创建两个不同类型的数组.
更一般地说,我可能想要创建一个带有可变节点的任意图形,逐个节点地修改它,就像我STArray
按单元格修改一个单元格一样,然后立即冻结整个图形并返回正常的不可变数据.
我不想诉诸IOArray
于IO
monad 中的s或任何东西.我有什么选择?
我需要禁用 gcc 编译的代码中的所有 AVX512 扩展。原因是 Valgrind 在 AVX512 指令上卡住了。有没有办法用一个标志来做到这一点?
我知道如何单独禁用每个扩展(-mno-avx512f
等-mno-avx512pf
),但这很麻烦,因为不同的 gcc 版本支持这些扩展的不同子集。
我使用CMake。如果有一种方法可以使用 CMake 机器自动化标记,这也对我有用。
我得出了一个令我困惑的陈述(定理?)。我想知道我的逻辑是否合理。
任何可交换的非严格函数
f :: a -> a -> b
都是常数。
可交换了解,包括底部,即f x y
与f y x
两个都终止,或两者都不。
我的非正式推理如下。假设f
是一个非严格函数。那么存在a
这样的,要么f a ?
或f ? a
终止。如果f
是可交换的,那么两者都应该终止。但是,f
不能仔细检查它的任何一个论点。(如果它首先检查第一个参数,则f ? a
must be ?
,反之亦然)。所以它必须是一个常数函数。
这个推理正确吗?
如果f
允许同时检查两个参数并且如果其中一个不是?
. 但是在(一些相当保守的扩展)Haskell 中允许这样的函数吗?
我有打印一些字符的 C 代码。我希望看到这些字符被打印出来,而不是字母汤,
\n#include <stdio.h>\nint main() {\n const char* test = "Greek: \xce\xb1\xce\xb2\xce\xb3\xce\xb4; German: \xc3\x9cbergr\xc3\xb6\xc3\x9fentr\xc3\xa4ger";\n printf("%s\\n", test);\n}\n
Run Code Online (Sandbox Code Playgroud)\n什么有效:
\ngcc test.c -o test && ./test
winegcc test.c o test.exe && ./test.exe
x86_64-w64-mingw32-gcc -o test.exe test.cpp && wine ./test.exe | cat
所有三个命令都会打印Greek: \xce\xb1\xce\xb2\xce\xb3\xce\xb4; German: \xc3\x9cbergr\xc3\xb6\xc3\x9fentr\xc3\xa4ger
到终端。
什么不起作用:
\nx86_64-w64-mingw32-gcc -o test.exe test.cpp && wine ./test.exe
这会打印Greek: \xc3\x8e\xc2\xb1\xc3\x8e\xc2\xb2\xc3\x8e\xc2\xb3\xc3\x8e\xc2\xb4; German: \xc3\x83bergr\xc3\x83\xc2\xb6\xc3\x83entr\xc3\x83\xc2\xa4ger
到终端。 …
这有效:
\nconst char* foo[] = {"This", "is", nullptr, "great"};\nfor (auto e : ::std::ranges::take_while_view (foo, // <- array\n ([](const char* s){return s!=nullptr;})))\n std::cout << e << "\\n";\n
Run Code Online (Sandbox Code Playgroud)\n这不会:
\nconst char* foo[] = {"This", "is", nullptr, "great"};\nfor (auto e : ::std::ranges::take_while_view (&foo[0], // <- pointer\n ([](const char* s){return s!=nullptr;})))\n std::cout << e << "\\n";\n\nerror: no matching function for call to \xe2\x80\x98take_while_view(const char**,\n main(int, char**)::<lambda(const char*)>)\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n我们能否使用标准库类型和函数强制 C++ 将指针视为一种半无限范围,然后我们可以进一步限制它?
\n我总是可以创建自己的类来表示半无限视图,但我宁愿在标准库中找到解决方案。
\n