小编abi*_*ips的帖子

运行"货物构建"时无法执行链接器"cc"错误

我刚在Mac上安装了Rust并rustc --version --verbose显示

rustc 1.0.0-nightly (91bdf23f5 2015-03-09) (built 2015-03-08)
binary: rustc
commit-hash: 91bdf23f504f79ed59617cde3dfebd3d5e39a476
commit-date: 2015-03-09
build-date: 2015-03-08
host: x86_64-apple-darwin
release: 1.0.0-nightly
Run Code Online (Sandbox Code Playgroud)

我克隆了几个存储库(postgres-extensionerlang-rust-nif)并在cargo build它们上面运行.两人都报告了错误

error: could not exec the linker `cc`: No such file or directory (os error 2)
error: aborting due to previous error
Run Code Online (Sandbox Code Playgroud)

另外,我无法"hello world"使用rustc 编译简单的Rust文件打印.我只能通过传递标志来编译它们rustc -C linker=gcc hello_world.rs.

clang --version 显示器

clang version 3.4.2  (http://llvm.org/git/llvm.git 5c6aa738fb3325ae499454877f1e2926d2368135)
Target: x86_64-apple-darwin12.2.1
Thread model: posix
Run Code Online (Sandbox Code Playgroud)

gcc --version 显示器

gcc (Homebrew …
Run Code Online (Sandbox Code Playgroud)

macos linker rust rust-cargo

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

NIF调用Erlang后二进制更改的值

我打算使用NIF操作二进制文件用于我计划在Erlang中编码的应用程序.下面给出了指向cpp文件的gist链接和NIF的erl文件.

[Erl Gist Link] https://gist.github.com/abhijitiitr/3a5bc97184d6dd32f97b

[C++ Gist Link] https://gist.github.com/abhijitiitr/24d2b780f2cdacebfb07

基本上我正在尝试做一个简单的测试.在NIF调用之间共享二进制文件,并使用连续的NIF调用成功操作它们.

如果你在erlang REPL中测试代码

c(binary_test).
Ref=binary_test:open(<<1>>).
binary_test:increment(Ref,<<3>>).
Run Code Online (Sandbox Code Playgroud)

存储的二进制文件在NIF调用之间发生变化.第三个命令的REPL输出是

1
 3
  60
    60
      <<"?">>
Run Code Online (Sandbox Code Playgroud)

<<1>>在初始化阶段通过了.它为什么改为<<60>>?我无法弄清楚这里发生了什么.有人可以指出错误吗?

C++编译指令

clang++ -std=c++11 -stdlib=libc++ -undefined dynamic_lookup -O3 -dynamiclib binary_test.cpp -o binary_test.so -I /usr/local/Cellar/erlang/17.0/lib/erlang/erts-6.0/include/ 
Run Code Online (Sandbox Code Playgroud)

在我的Mac上.

此外,我想问一下在NIF中操作共享资源的并发进程.这是可能的还是有一个规则,即必须在单个Erlang进程中访问NIF.

c erlang erlang-shell c++11 erlang-nif

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

Erlang:阻止C NIF呼叫行为

我观察到C NIF的阻塞行为,当它们被许多Erlang进程同时调用时.可以做成非阻塞吗?这里有mutex工作,我无法理解吗?

PS一个基本的"Hello world"NIF可以通过在特定调用它的情况下使其成为sleep一百来进行测试.可以观察到,调用NIF的其他PID等待该睡眠在执行之前执行.microsecondsPID

在并发可能不会造成问题的情况下(例如,数组推送,计数器增量),非阻塞行为将是有益的.

我共享链接至4个要旨,其包含的spawner,conc_nif_callerniftest分别模块.我试图修改价值,Val我确实观察到了非阻塞行为.通过为spawn_multiple_nif_callers函数指定一个大整数参数来确认这一点.

链接 spawner.erl,conc_nif_caller.erl,niftest.erl,最后是niftest.c.

下面的行由我的Mac上的Erlang REPL打印.

Erlang/OTP 17 [erts-6.0] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Run Code Online (Sandbox Code Playgroud)

c concurrency erlang erlang-nif

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

标签 统计

c ×2

erlang ×2

erlang-nif ×2

c++11 ×1

concurrency ×1

erlang-shell ×1

linker ×1

macos ×1

rust ×1

rust-cargo ×1