小编n. *_* m.的帖子

Hackage包中的未定义符号`double-conversion`

我正在尝试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.

gcc haskell ghc

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

GHCi从不加载编译文件

写一个模块:

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不会出现此问题.

haskell ghc ghci

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

集成 XCB 和 libX11 事件循环 - 挂在 Xt 内的选择/轮询上

我试图将两个代码体集成到同一个进程中,每个进程以前都为各自的 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() 似乎正在检查事件队列中是否有待处理的事件。

我有几个问题:

  1. 当在同一个程序中同时使用 XCB 和 libX11 调用(使用 XCB 作为事件队列主控器)时,我是否可以期望来自经典 Xlib 的调用也能正常工作——例如通过 libX11 调用将事件发布到 XCB 事件队列,或者确定是否有通过旧的 libX11 调用在 XCB 事件队列中挂起的任何事件?

  2. 为什么 XtManageChild() 最终会阻塞 libXt 中的 _XtWaitForSomething()?看起来它可能正在等待几何更改事件。有趣的是,Qt 的平台层在单独的线程中读取 XCB …

x11 events qt motif xcb

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

Python编译错误:“平台的LONG_BIT定义似乎错误”

此错误消息不是未知的,我已经重新安装了许多软件包,但到目前为止尚未找到解决方案。

我从命令中收到以下错误 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存在。

python linux ubuntu gcc

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

将字节数组传递给接受空指针的 C++ 函数

我正在使用 boost::python 导出一些需要void*. 他们在内部将其解释为原始内存(字节数组)。想readwrite一些非常特殊用途的装置。

如何将 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)

python boost

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

分段可变状态的monad

我知道普通的State作品(编辑:显然不是!).

如果我需要创建一个数组,并且不方便一次创建整个数组,我可以创建一个STArray,填充它,然后冻结并返回一个普通的不可变数组给用户.

现在假设我需要同时创建两个不同类型的数组.

更一般地说,我可能想要创建一个带有可变节点的任意图形,逐个节点地修改它,就像我STArray按单元格修改一个单元格一样,然后立即冻结整个图形并返回正常的不可变数据.

我不想诉诸IOArrayIOmonad 中的s或任何东西.我有什么选择?

haskell state-monad

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

禁用所有 AVX512 扩展

我需要禁用 gcc 编译的代码中的所有 AVX512 扩展。原因是 Valgrind 在 AVX512 指令上卡住了。有没有办法用一个标志来做到这一点?

我知道如何单独禁用每个扩展(-mno-avx512f-mno-avx512pf),但这很麻烦,因为不同的 gcc 版本支持这些扩展的不同子集。

我使用CMake。如果有一种方法可以使用 CMake 机器自动化标记,这也对我有用。

gcc instruction-set avx avx512

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

交换函数的意外性质?

我得出了一个令我困惑的陈述(定理?)。我想知道我的逻辑是否合理。

任何可交换的非严格函数f :: a -> a -> b都是常数。

可交换了解,包括底部,即f x yf y x两个都终止,或两者都不。

我的非正式推理如下。假设f是一个非严格函数。那么存在a这样的,要么f a ?f ? a终止。如果f是可交换的,那么两者都应该终止。但是,f不能仔细检查它的任何一个论点。(如果它首先检查第一个参数,则f ? amust be ?,反之亦然)。所以它必须是一个常数函数。

这个推理正确吗?

如果f允许同时检查两个参数并且如果其中一个不是?. 但是在(一些相当保守的扩展)Haskell 中允许这样的函数吗?

haskell functional-programming lazy-evaluation strictness

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

在linux上用mingw构建程序并在wine下运行---UTF-8支持

我有打印一些字符的 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

什么有效:

\n
    \n
  1. 本机Linux编译:gcc test.c -o test && ./test
  2. \n
  3. Winegcc编译:winegcc test.c o test.exe && ./test.exe
  4. \n
  5. 当输出不是终端时的MinGW64 编译:x86_64-w64-mingw32-gcc -o test.exe test.cpp && wine ./test.exe | cat
  6. \n
\n

所有三个命令都会打印Greek: \xce\xb1\xce\xb2\xce\xb3\xce\xb4; German: \xc3\x9cbergr\xc3\xb6\xc3\x9fentr\xc3\xa4ger到终端。

\n

什么不起作用:

\n
    \n
  1. 当输出是终端时的MinGW64 编译:x86_64-w64-mingw32-gcc -o test.exe test.cpp && wine ./test.exe
  2. \n
\n

这会打印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到终端。 …

c wine utf-8 mingw-w64

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

将指针转换为范围

这有效:

\n
const 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

这不会:

\n
const 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

c++ c++20

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