使用自动工具的未定义引用
Undefined references with using autotools
我如今正在努力解决这些不确定的参考,我在下面通过在我的机器上使用autotools所描述的。
我不确定我有未定义的裁判的原因是什么,但是我怀疑与自动工具有关,也许C 17与自动工具没有完全集成,我的设置不好或...想法。
我检查了语法数万亿次,将模板定义仅移至标题,将参数计数更改为功能,重新排列的makefiles ..等。仍然没有。
也许您可以帮助我?
configure.ac
AC_INIT([CRYPTO], [0.1], [iamhidingmymail@gmail.com])
AM_INIT_AUTOMAKE
AC_PROG_RANLIB
AC_PROG_CXX
AC_LANG(C++)
AX_CHECK_COMPILE_FLAG([-std=c++17], [
CXXFLAGS="$CXXFLAGS -std=c++17"])
AC_CONFIG_FILES([ fsio/Makefile logger/Makefile rsa/Makefile primes/Makefile Makefile])
AC_OUTPUT
topdir-> makefile.am
AUTOMAKE_OPTIONS = foreign
SUBDIRS = logger fsio primes rsa
AM_CPPFLAGS = -I$(top_srcdir) -Wall -std=c++17
bin_PROGRAMS = crypto.out
crypto_out_SOURCES = bigInt.cpp Source.cpp
crypto_out_LDADD = -lpthread fsio/libFsio.a logger/libLogger.a rsa/libRSA.a primes/libPrimes.a
fsio/makefile.am
noinst_LIBRARIES = libFsio.a
libFsio_a_SOURCES = fsio.cpp
libFsio_a_CPPFLAGS = -I$(top_srcdir) -Wall -std=c++17
logger/makefile.am
noinst_LIBRARIES = libLogger.a
libLogger_a_SOURCES = loga.cpp
libLogger_a_CPPFLAGS = -I$(top_srcdir) -Wall -std=c++17
未定义的参考文献1:
Source.cpp:17: undefined reference to `void logger::loga::I<char const*, char const*, char const*>(char const*, char const*, char const*)'
source.cpp:17是:
logger::loga l("testlog.log");
l.I("Test", "test ","!");//line 17
定义为:
template<typename ...message>
void loga::I(message ...m){
//(this is fold expression)
//code
}
未定义的参考2:
logger/libLogger.a(libLogger_a-loga.o): In function `logger::loga::loga(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
<path>/logger/loga.cpp:7: undefined reference to `fsio::file::file(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::_Ios_Openmode)'
<path>/logger/loga.cpp:7: undefined reference to `fsio::file::operator=(fsio::file const&)'
while loga.cpp:7是:
loga::loga(std::string filename){
Logger = std::move(fsio::file(filename));//line 7
}
和 logger 定义为:
::fsio::file Logger;
在fsio.h
中但是, file 构造函数和操作员=的定义可以在
下找到//in header file constructor is declared as
(std::string& filename, std::fstream::openmode it =
(std::ios::app|std::ios::out|std::ios::in));
file::file(std::string& filename , std::ios_base::openmode om ){
//code
//code
}
file& file::operator=(const file& f){
//code
return *this;
}
二进制编译:
g++ -g -O2 -std=c++17 -o crypto.out bigInt.o Source.o -lpthread fsio/libFsio.a logger/libLogger.a rsa/libRSA.a primes/libPrimes.a
我制作了用于运行配置,制作等的自定义脚本。它是:
./构建
#!/bin/bash
set -e
aclocal
autoconf
automake --add-missing
./configure
echo
make -j4
echo "building done, running application:"
./crypto.out
echo "done!"
fyi
Ubuntu 17.10
uname -a
Linux nikola 4.13.0-041300-generic #201709031731 SMP Sun Sep 3 21:33:09 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
automake --version
automake (GNU automake) 1.15
g++ -v
gcc version 7.2.0 (Ubuntu 7.2.0-8ubuntu3)
如果您觉得代码很短,请访问我的github
https://github.com/nikolalozanovski/crypto/tree/logger
分支:logger
谢谢!
for ur1 i dod define header 文件中的模板函数 file,以前声明了模板功能在标题中,但在源中定义。做技巧
对于 ur2 i 包括定义了这些功能的静态库,并在相应的 makefile libadd 使用_ libadd 指令/strong>。编译器不知道在哪里可以找到这些功能的符号。现在知道:)
相关文章:
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 对 Scalar ::Scalar() 的未定义引用
- 对复制 CTOR 和 CTOR 的未定义引用
- 对显式实例化的模板函数的未定义引用
- TensorRT (C++ API) 对"createNvOnnxParser_INTERNAL"的未定义引用
- 2个模板化类的非模板友元函数未定义引用错误
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 获取对function_name的未定义引用
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 对结构方法的未定义引用
- 使用内联函数 c++ 的未定义引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对 DLOPEN 的未定义引用
- QT C++中对全局变量的未定义引用
- 快速数学导致对"__pow_finite"的未定义引用
- 对 boost::system::d etail::system_category_instance 的未定义引用,从
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用