今天编译erlang自带的ei_interface的例子时,报错如下
[liufan@liufan src]$ gcc -o extprg -I/usr/local/lib/erlang/lib/erl_interface-3.7.13/include/ -L/usr/local/lib/erlang/lib/erl_interface-3.7.13/lib complex.c erl_comm.c ei.c -lerl_interface -lei
/usr/local/lib/erlang/lib/erl_interface-3.7.13/lib/libei.a(ei_pthreads.o): In function `__erl_errno_place':
/home/liufan/workspace/sourceCode/otp_src_R16B01/lib/erl_interface/src/misc/ei_pthreads.c:194: undefined reference to `pthread_once'
/home/liufan/workspace/sourceCode/otp_src_R16B01/lib/erl_interface/src/misc/ei_pthreads.c:200: undefined reference to `pthread_getspecific'
/home/liufan/workspace/sourceCode/otp_src_R16B01/lib/erl_interface/src/misc/ei_pthreads.c:209: undefined reference to `pthread_setspecific'
/home/liufan/workspace/sourceCode/otp_src_R16B01/lib/erl_interface/src/misc/ei_pthreads.c:210: undefined reference to `pthread_getspecific'
/usr/local/lib/erlang/lib/erl_interface-3.7.13/lib/libei.a(ei_pthreads.o): In function `erl_errno_key_alloc':
/home/liufan/workspace/sourceCode/otp_src_R16B01/lib/erl_interface/src/misc/ei_pthreads.c:171: undefined reference to `pthread_key_create'
/usr/local/lib/erlang/lib/erl_interface-3.7.13/lib/libei.a(ei_pthreads.o): In function `ei_m_trylock':
/home/liufan/workspace/sourceCode/otp_src_R16B01/lib/erl_interface/src/misc/ei_pthreads.c:138: undefined reference to `pthread_mutex_trylock'
collect2: ld returned 1 exit status
经过再网上搜索得到需要再编译选项里加上-lpthread,经改正后,编译正常通过,效果如下:
[liufan@liufan src]$ gcc -o extprg -I/usr/local/lib/erlang/lib/erl_interface-3.7.13/include/ -L/usr/local/lib/erlang/lib/erl_interface-3.7.13/lib complex.c erl_comm.c ei.c -lerl_interface -lei -lpthread
[liufan@liufan src]$
在运行的时候按照文档里的步骤执行
Erlang R16B01 (erts-5.10.2) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V5.10.2 (abort with ^G)
1> c(complex2).
complex2.erl:43: Warning: variable 'Reason' is unused
{ok,complex2}
2> comp
compile complex2
2> complex2:start("extprg").
<0.40.0>
3> sh: line 0: exec: extprg: not found
却和文档写的不一样,经过自己修改后正确
Erlang R16B01 (erts-5.10.2) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V5.10.2 (abort with ^G)
1> complex2:start("./extprg").
<0.34.0>
2>
2> complex2:foo(3).
4
3> complex2:bar(5).
10
4> complex2:st
start/1 stop/0
4> complex2:stop().
stop
分享到:
相关推荐
在嵌入式开发中,由于目标平台和开发环境的不同,我们通常使用交叉编译,即在宿主机(例如Windows)上运行编译器,生成适用于目标板(如STM32F103)的代码。 armgcc是GCC针对ARM架构的定制版本,它包含了预处理器、...
"Gcc编译选项-报错告警选项.rar"这个压缩包文件很可能包含了关于如何设置GCC编译器在遇到错误和警告时的具体行为的相关资料。 在GCC中,错误和警告选项是非常重要的,它们直接影响到编译过程的严谨性和代码质量。...
### gcc编译时pow函数编译的问题及解决 #### 背景介绍 在使用`gcc`(GNU Compiler Collection)进行C语言程序编译时,可能会遇到与标准库函数相关的编译错误。其中,`pow`函数作为一种常用的数学运算函数,在进行...
3. **性能问题**:使用MinGW gcc编译的Python可能会在性能上略逊于使用Microsoft Visual C++编译的版本。这是因为后者针对Windows环境进行了更深入的优化。 #### 六、结论 虽然使用MinGW gcc在Windows下编译Python...
描述中提到的"解决go gcc error等gcc编译报错问题",意味着这个包特别针对Go语言的开发进行了优化。Go语言的编译器通常依赖于C编译器(如GCC)来处理C语言的交叉编译部分。当用户尝试在Windows上使用Go语言并且遇到...
2. **编译器版本不兼容**:确保系统上的GCC(GNU Compiler Collection)或其他C/C++编译器版本与Live555源代码要求的版本一致。 3. **配置步骤错误**:在运行`configure`脚本时,可能需要指定某些选项来适应CentOS...
其中,Cygwin GCC是基于GNU Compiler Collection (GCC)的编译器组件之一,主要用于编译C/C++源代码到Windows可执行文件(.exe)或动态链接库(.dll)。 #### 二、编译生成Windows下的DLL ##### 1. 编译DLL的基本...
在这个场景中,我们关注的是如何利用Visual Studio Code(简称VSCode)这款强大的源代码编辑器来编译Keil工程,这是一种常见的嵌入式开发流程。下面将详细阐述这个过程以及涉及的相关知识点。 首先,`VSCode` 是由...
在使用Go语言进行开发时,有时会遇到编译问题,特别是涉及到C语言接口或使用cgo工具时,Go编译器需要依赖GCC(GNU Compiler Collection)来处理C代码。标题和描述提到了“GO编译找不到GCC解决方案”,这通常是因为...
4. **错误检查**:如果GCC在编译过程中没有报错,那么源代码的语法是正确的。如果有错误,系统应捕获并记录错误信息,反馈给用户。 5. **运行测试**:为了进一步验证代码的逻辑正确性,需要编写测试用例。这通常...
在Linux环境下,`gcc`用于将源代码编译成可执行程序,是许多软件包(包括`nginx`)构建的基础。在离线环境中,你需要先将`gcc-rpm`包安装到系统中,这通常通过`yum install`或`rpm -ivh`命令完成,具体操作应根据...
GCC(GNU Compiler Collection)是GNU项目的一个重要组成部分,它是一个开源的编译器套件,支持C、C++、Objective-C、Fortran、Ada、Go等多种编程语言。在CentOS系统中,如果你需要进行开发工作或者编译源代码,安装...
交叉编译是指在一个平台上编译出可以在另一个平台上运行的代码。在嵌入式开发领域,由于目标平台资源有限,通常采用这种方法。这里我们将重点介绍如何安装`arm-linux-gcc`交叉编译器,并验证其正确性。 #### 安装...
cJSON库可以在Linux和Windows系统上使用C或C++编译器编译。在Linux上,通常使用`gcc`或`g++`,在Windows上可以使用Visual Studio或其他IDE。编译步骤包括: 1. 解压`cJSON.c`和`cJSON.h`到项目目录。 2. 将`cJSON.c...
进行SDL2的交叉编译,首先需要安装交叉编译工具链,如ARM或MIPS的GCC工具链,这将允许我们在主机系统(如Linux或Windows)上构建适用于目标平台的二进制文件。确保工具链已经正确配置,能够识别目标架构的指令集。 ...
它们详细阐述了GCC的使用方法、选项设置、各种编译阶段的工作原理以及汇编语言的细节,对于深入理解和使用Linux环境下的软件开发极其有价值。 总之,Linux GCC是软件开发中的强大工具,它涵盖了从源代码到可执行...
GCC的编译器g++专门用于C++编程,而gcc则主要处理C语言代码,但两者并非完全独立。实际上,gcc和g++在编译阶段可以互换使用,区别在于g++在链接阶段会自动处理C++程序所需的库,而gcc则不会。因此,当处理C++程序时...