热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在bitcask-“errno”中,rebar编译失败。h”:没有这样的文件-rebarcompilefailswithbitcask-“errno.h”:nosuchfile

IamnewtoErlang,soiamgoingthroughJoeArmstrongsbookProgrammingErlang.Inchapter25t

I am new to Erlang, so i am going through Joe Armstrong's book "Programming Erlang". In chapter 25 there's an example on how to work with rebar. I followed the instructions and created a Makefile

我是Erlang的新手,所以我要通过Joe Armstrong的书“编程Erlang”。在第25章有一个关于如何使用钢筋的例子。我按照说明创建了一个Makefile

all:
    test -d deps || rebar get-deps
    rebar compile -v
    @erl -noshell -pa './deps/bitcask/ebin' -pa './ebin' -s myapp start

and rebar.config

和rebar.config

{deps, [
    {bitcask, ".*", {git, "git://github.com/basho/bitcask.git", "master"}}
]}.

Getting the dependencies works, but compiling fails.

获得依赖项有效,但是编译失败。

The verbose output tells me that this command fails

详细输出告诉我该命令失败

cmd: cc -c $CFLAGS -g -Wall -fPIC  -I"/usr/lib/erlang/lib/erl_interface-3.7.18/include" -I"/usr/lib/erlang/erts-6.2/include"   c_src/bitcask_nifs.c -o c_src/bitcask_nifs.o

with this error

与这个错误

/home/user/folder/deps/bitcask/c_src/bitcask_nifs.c:22:19: fatal error: errno.h: No such file or directory

But

find /usr/include -name errno.h

gives me

给我

/usr/include/x86_64-linux-gnu/asm/errno.h
/usr/include/asm/errno.h
/usr/include/linux/errno.h
/usr/include/asm-generic/errno.h

So I was asking myself..

所以我问自己。

  • what am I missing?
  • 我缺少什么?
  • how can I tell rebar about the depencies on the C libraries and where to find them?
  • 如何告诉rebar关于C库的依赖关系以及在哪里找到它们?
  • why isn't this configured correctly in the Makefile of bitcask?
  • 为什么不能在bitcask的Makefile中正确配置它呢?

Maybe I was searching for the wrong terms, but I couldn't find any solution in the internets.
Many thanks in advance

也许我在寻找错误的术语,但是我在互联网上找不到任何解决方案。提前感谢

1 个解决方案

#1


0  

There are two thing to consider

有两件事需要考虑

rebar options

You can set options for compiling C code with port_env option in rebar.config.

可以在rebar.config中设置使用port_env选项编译C代码的选项。

comiling deps

Since bitstack is your dependency, it is not compiled with yours rebar config, but with it's own. So if you would like to change anything, you would have to modify the bitcask file.

由于位堆栈是您的依赖项,所以它不是用您的rebar配置编译的,而是用自己的配置编译的。因此,如果您想要更改任何内容,您必须修改bitcask文件。

Fortunately, if you look into config their writen all C compilation is done with environment variable $ERL_CFLAGS. And again, in rebar source code you can see that this flag is responsible for include paths in your compilation.

幸运的是,如果您查看配置,可以使用环境变量$ERL_CFLAGS完成他们的writen all C编译。同样,在rebar源代码中,您可以看到这个标志负责编译中的包含路径。

So easist way would be extending $ERL_CFLAGS in your Makefile before compilation, with something like this

因此,最简单的方法是在编译之前在Makefile中扩展$ERL_CFLAGS,使用如下方法

all: ERL_CFLAGS = "$ERL_CFLAGS -I /usr/include/linux/errno.h"
all: 
    test -d deps || rebar get-deps
    rebar compile -v
    @erl -noshell -pa './deps/bitcask/ebin' -pa './ebin' -s myapp start

Just make sure that this include works for you, and that you are not overwriting any flags you are using.

只要确保这个include对您有效,并且您没有覆盖正在使用的任何标志。


推荐阅读
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 本文详细解析了Java类加载系统的父子委托机制。在Java程序中,.java源代码文件编译后会生成对应的.class字节码文件,这些字节码文件需要通过类加载器(ClassLoader)进行加载。ClassLoader采用双亲委派模型,确保类的加载过程既高效又安全,避免了类的重复加载和潜在的安全风险。该机制在Java虚拟机中扮演着至关重要的角色,确保了类加载的一致性和可靠性。 ... [详细]
  • 在C#编程中,数值结果的格式化展示是提高代码可读性和用户体验的重要手段。本文探讨了多种格式化方法和技巧,如使用格式说明符、自定义格式字符串等,以实现对数值结果的精确控制。通过实例演示,展示了如何灵活运用这些技术来满足不同的展示需求。 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 深入理解Java中的多态性概念及其应用
    多态是面向对象编程中的三大核心特性之一,与封装和继承共同构成了面向对象的基础。多态使得代码更加灵活和可扩展,封装和继承则为其提供了必要的支持。本文将深入探讨多态的概念及其在Java中的具体应用,帮助读者全面理解和掌握这一关键知识点。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 本文详细介绍了定时器输入捕捉技术的原理及其应用。通过配置定时器通道的引脚模式为输入模式,并设置相应的捕获触发条件,可以实现对外部信号的精确捕捉。该技术在实时控制系统中具有广泛的应用,如电机控制、频率测量等场景。文中还提供了具体的配置步骤和示例代码,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
author-avatar
dvs5453401
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有