首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译来自大型项目的单独文件的Makefile和错误

编译来自大型项目的单独文件的Makefile和错误
EN

Stack Overflow用户
提问于 2017-06-28 01:03:00
回答 1查看 373关注 0票数 0

我试图编译一个小的.cpp文件,但是遇到了问题,因为这个文件使用了许多其他文件中的函数。基本上,我克隆了ZCash回购,目前正在尝试使用该项目中的特定文件进行一些测试。当我编译整个ZCash回购时,我克隆的所有文件都工作得很完美,但是当我试图编译我正在处理的文件时,其中一些会出现语法错误。

我的制作文件:

代码语言:javascript
复制
CC = g++
CFLAGS = -std=c++11 -Wall -g -c 
IDIR = /home/parallels/zcash/src/
INC = -I /home/parallels/zcash/src/ -I 
/home/parallels/zcash/depends/x86_64-unknown-linux-gnu/include/
VPATH = /home/parallels/zcash/src/

all: Main.o KeyGen.o prf.o uint256.o sha256.o
    $(CC) Main.o KeyGen.o prf.o uint256.o sha256.o -o keygenerator

Main.o: Main.cpp
    $(CC) $(CFLAGS) Main.cpp $(INC)

KeyGen.o: KeyGen.cpp
    $(CC) $(CFLAGS) KeyGen.cpp $(INC)

prf.o: prf.cpp
    $(CC) $(CFLAGS) prf.cpp $(INC)

uint256.o: uint256.cpp
    $(CC) $(CFLAGS) uint256.cpp $(INC)

sha256.o: sha256.cpp
    $(CC) $(CFLAGS) sha256.cpp $(INC)

clean: 
    rm -rf *.o keygenerator

正在编译的.cpp文件引用这些其他文件:

Main.cpp:

代码语言:javascript
复制
#include "KeyGen.h"
#include "uint252.h"
#include "uint256.h"
#include <string>

KeyGen.cpp

代码语言:javascript
复制
#include "KeyGen.h"
#include "prf.h"

prf.cpp

代码语言:javascript
复制
#include "prf.h"
#include "crypto/sha256.h"

uint256.cpp

代码语言:javascript
复制
#include "uint256.h"
#include "utilstrencodings.h"
#include <stdio.h>
#include <string.h>

sha256.cpp

代码语言:javascript
复制
#include "crypto/sha256.h"
#include "crypto/common.h"
#include <string.h>
#include <stdexcept>

因此,在尝试编译这些文件之后,我会得到以下错误:

/home/parallels/zcash/depends/x86_64-unknown-linux-gnu/include/ / g++ -std=c++11 -Wall -g -c Main.cpp -I /home/parallels/zcash/src/ -I /home/parallels/zcash/depends/x86_64-unknown-linux-gnu/include/ / g++ -std=c++11 -Wall -g -c KeyGen.cpp -I /home/parallels/zcash/src/ -I /home/parallels/zcash/depends/x86_64-unknown-linux-gnu/include/ / g++ -std=c++11 -Wall -g -c prf.cpp -I /home/parallels/zcash/src/ -I /home/parallels/zcash/depends/x86_64-unknown-linux-gnu/include/ g++ -std=c++11 -Wall -g -c #en0#256.cpp -I /home/parallels/zcash/src/ -I -I

代码语言:javascript
复制
g++ -std=c++11 -Wall -g -c  sha256.cpp -I /home/parallels/zcash/src/ -I /home/parallels/zcash/depends/x86_64-unknown-linux-gnu/include/

In file included from /usr/include/x86_64-linux-gnu/bits/byteswap.h:35:0,
      
from /usr/include/endian.h:60,

             from /usr/include/x86_64-linux-gnu/bits/waitstatus.h:64,

             from /usr/include/stdlib.h:42,

             from /home/parallels/zcash/src/crypto/sha256.h:9,

             from sha256.cpp:5:

/home/parallels/zcash/src/compat/endian.h:111:17: error: expected unqualified-id before ‘__extension__’

inline uint16_t htobe16(uint16_t host_16bits)
                   ^

在违规文件中,/home/parallels/zcash/src/compat/endian.h:111:17,htobe16的用法如下:

代码语言:javascript
复制
#if HAVE_DECL_HTOBE16 == 0
inline uint16_t htobe16(uint16_t host_16bits) //line #111 
{
    return bswap_16(host_16bits);
}
#endif // HAVE_DECL_HTOBE16

还有一个文件: /usr/include/endian.h .h,它引用htobe16,如下所示。

代码语言:javascript
复制
# include <bits/byteswap.h> //line #60 

# if __BYTE_ORDER == __LITTLE_ENDIAN
#  define htobe16(x) __bswap_16 (x)
#  define htole16(x) (x)
#  define be16toh(x) __bswap_16 (x)
#  define le16toh(x) (x)

注意:我正在编译的所有.cpp文件都位于我克隆的ZCash回购文件和我创建的新文件夹中(不知道这是否是问题所在)。

我目前正在处理的文件夹包含: KeyGen.cpp

KeyGen.h

Main.cpp

Makefile

prf.cpp

prf.h

serialize.h

sha256.cpp

sha256.h

uint252.h

uint256.cpp

uint256.h

很抱歉这么长的帖子,我真的很感谢你的时间,并会真的感谢一些帮助!

EN

回答 1

Stack Overflow用户

发布于 2018-06-27 17:58:41

内联函数已经由几个同名的宏声明。类似于这个问题:’ in Linux (Cent OS)

可能与您从整个项目构建的片中未配置的部分有关,正如这个Github讨论似乎表明:https://github.com/bitcoin/bitcoin/issues/5920

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44792127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档