我在Github上分配一个现有的项目,我想对其进行一些更改。我想做的一件事是添加一个额外的文件。此文件应位于Makefile.am生成的库之一中。问题是我要添加的文件是.c文件,而项目中的其他内容都是.cpp。
应该包含该文件的库在makefile中使用如下:
MYLIBRARY=path/mylibrary.a
...
path_mylibrary_a_CPPFLAGS = $(AM_CPPFLAGS)
path_mylibrary_a_CXXFLAGS = $(AM_CXXFLAGS)
path_mylibrary_a_SOURCES = \
path/cppfile1.cpp \
path/cppfile1.h \
path/cppfile2.cpp \
path/cppfile2.h \
path/cppfile3.cpp \
path/cppfile3.h
...
mybinary_LDADD = $(MYLIBRARY)
只需将path/cfile.c
和path/cfile.h
添加到源列表中,就会出现以下错误:
CXXLD mybinary
/usr/bin/ld: path/mylibrary.a(path_mylibrary_a-cfile.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
path/mylibrary.a: error adding symbols: Bad value
我能做什么,Makefile.am会在一个以c ++构建的项目中编译c文件?
答案 0 :(得分:0)
答案 1 :(得分:0)
我认为你的cfile.h
具有结构
#ifndef MYLIBRARY_CFILE_H
#define MYLIBRARY_CFILE_H
#ifdef __cplusplus
extern "C" {
#endif
/* your C declarations here */
#ifdef __cplusplus
}
#endif
#endif /* MYLIBRARY_CFILE_H */
另外,作为一般提示:如果要将一些源文件添加到Makefile.am
文件中的库或程序,只需添加行
path_mylibrary_a_SOURCES += cfile.c cfile.h
这使得一个非常干净的补丁只添加一行,不触及其他行等。
此外,我同意path_mylibrary_a_CFLAGS
this.state = {recEmail: '', cc: '', bcc: '', subject: '', bodyText: '', testInput: false};
stateCleaner(emails){
var emailstoClean = [];
_.forOwn(emails, (value, key) => {
console.log('these are the keys: ', key);
console.log('these are the values: ', value);
if(key !== 'testInput'){
emailstoClean.push(value.split(', '))
}
})
console.log('final emailstoClean: ', emailstoClean);
return emailstoClean
}
您可能需要添加的内容。