Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用静态库编译时发生链接器错误_C++_C++11_Boost_Makefile_Static Libraries - Fatal编程技术网

C++ 使用静态库编译时发生链接器错误

C++ 使用静态库编译时发生链接器错误,c++,c++11,boost,makefile,static-libraries,C++,C++11,Boost,Makefile,Static Libraries,我有一个包含多个.cpp和.h文件的项目,我正在尝试将源代码拆分为核心/通用文件和特定于应用程序的代码。基于此,我将代码文件分离到一个公共文件夹中,并将其编译为一个库。下面是该库的生成文件: CFLAGS=-std=c++11 -g -c -pedantic -Wall -Wextra -I../boost_1_57_0 -L../boost_1_57_0/stage/lib SOURCES = $(wildcard *.cpp) OBJECTS=$(SOURCES:.cpp=.o) OUTPU

我有一个包含多个.cpp和.h文件的项目,我正在尝试将源代码拆分为核心/通用文件和特定于应用程序的代码。基于此,我将代码文件分离到一个公共文件夹中,并将其编译为一个库。下面是该库的生成文件:

CFLAGS=-std=c++11 -g -c -pedantic -Wall -Wextra -I../boost_1_57_0 -L../boost_1_57_0/stage/lib
SOURCES = $(wildcard *.cpp)
OBJECTS=$(SOURCES:.cpp=.o)
OUTPUTFILE=libcommon.a

all: $(OUTPUTFILE)

$(OUTPUTFILE): $(OBJECTS)
    ar rcs $(OUTPUTFILE) $(OBJECTS)

.cpp.o:
    $(CC) $(CPPFLAGS) $(CFLAGS) $< -o $@ $(GPROF)

clean:
    rm -f $(OBJECTS) $(OUTPUTFILE)
正在引用的函数文件使用boost,下面是使用库的此应用程序的makefile:

CC=g++
CFLAGS=-Wl,--verbose -std=c++11 -g -c -pedantic -Wall -Wextra -I../boost_1_57_0 -L../boost_1_57_0/stage/lib
LDFLAGS=-I../boost_1_57_0 -L../boost_1_57_0/stage/lib -L../boost_libs/lib -L/usr/lib64 -L/usr/kerberos/lib -L/usr/lib -L../Common
LIBS=-lz -lkrb5 -lk5crypto -lcom_err -lresolv -lm -lpthread -lrt -lboost_system -lboost_filesystem -lboost_thread -lboost_date_time -rdynamic -lcurl -lcommon
SOURCES = $(wildcard *.cpp)
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=testApp
GPROF=-pg

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@ $(LIBS) $(GPROF)

.cpp.o:
    $(CC) $(CPPFLAGS) $(CFLAGS) $< -o $@ $(GPROF)

clean:
    rm -rf *o $(OBJECTS)
CC=g++
CFLAGS=-Wl,--verbose-std=c++11-g-c-pedantic-Wall-Wextra-I../boost_1_57_0-L../boost_1_57_0/stage/lib
LDFLAGS=-I../boost_1_57_0-L../boost_1_57_0/stage/lib-L../boost_libs/lib-L/usr/lib64-L/usr/kerberos/lib-L/usr/lib-L../Common
LIBS=-lz-lkrb5-lk5crypto-lcom_err-lresolv-lm-lpthread-lrt-lboost_system-lboost_filesystem-lboost_thread-lboost_-lboost_date_time-rdynamic-lcurl-lccommon
源=$(通配符*.cpp)
对象=$(源:.cpp=.o)
可执行文件=testApp
GPROF=-pg
全部:$(源)$(可执行)
$(可执行文件):$(对象)
$(CC)$(LDFLAGS)$(对象)-o$@$(LIBS)$(GPROF)
.cpp.o:
$(CC)$(CPPFLAGS)$(CFLAGS)$<-o$@$(GPROF)
清洁:
rm-rf*o$(对象)
当我尝试编译时,会出现以下错误,抱怨未定义的boost引用:

g++  -Wl,--verbose -std=c++11 -g -c -pedantic -Wall -Wextra -I../boost_1_57_0 -L../boost_1_57_0/stage/lib main.cpp -o main.o -pg
g++ -I../boost_1_57_0 -L../boost_1_57_0/stage/lib -L../boost_libs/lib -L/usr/lib64 -L/usr/kerberos/lib -L/usr/lib -L../Common main.o -o testApp -lz -lkrb5 -lk5crypto -lcom_err -lresolv -lm -lpthread -lrt -lboost_system -lboost_filesystem -lboost_thread -lboost_date_time -rdynamic -lcurl -lcommon -pg
../Common/libcommon.a(Functions.o): In function `Functions::GetAppPath()':
/media/software/Robots/Common/Functions.cpp:43: undefined reference to `boost::filesystem::path::parent_path() const'
../Common/libcommon.a(Functions.o): In function `boost::filesystem::initial_path()':
/media/software/Robots/Common/../boost_1_57_0/boost/filesystem/operations.hpp:583: undefined reference to `boost::filesystem::detail::initial_path(boost::system::error_code*)'
../Common/libcommon.a(Functions.o): In function `boost::filesystem::system_complete(boost::filesystem::path const&)':
/media/software/Robots/Common/../boost_1_57_0/boost/filesystem/operations.hpp:655: undefined reference to `boost::filesystem::detail::system_complete(boost::filesystem::path const&, boost::system::error_code*)'
../Common/libcommon.a(Functions.o): In function `unsigned short boost::date_time::month_str_to_ushort<boost::gregorian::greg_month>(std::string const&)':
/media/software/Robots/Common/../boost_1_57_0/boost/date_time/date_parsing.hpp:67: undefined reference to `boost::gregorian::greg_month::get_month_map_ptr()'
../Common/libcommon.a(Logger.o): In function `Logger::Cleanup()':
/media/software/Robots/Common/Logger.cpp:84: undefined reference to `boost::thread::interrupt()'
../Common/libcommon.a(Logger.o): In function `Logger::InitFile(std::string, bool, std::_Ios_Openmode)':
/media/software/Robots/Common/Logger.cpp:186: undefined reference to `boost::filesystem::path::parent_path() const'
/media/software/Robots/Common/Logger.cpp:187: undefined reference to `boost::filesystem::path::parent_path() const'
../Common/libcommon.a(Logger.o): In function `Logger::Process()':
/media/software/Robots/Common/Logger.cpp:241: undefined reference to `boost::this_thread::interruption_point()'
../Common/libcommon.a(Logger.o): In function `boost::detail::thread_data_base::thread_data_base()':
/media/software/Robots/Common/../boost_1_57_0/boost/thread/pthread/thread_data.hpp:143: undefined reference to `vtable for boost::detail::thread_data_base'
../Common/libcommon.a(Logger.o): In function `boost::thread::start_thread()':
/media/software/Robots/Common/../boost_1_57_0/boost/thread/detail/thread.hpp:179: undefined reference to `boost::thread::start_thread_noexcept()'
../Common/libcommon.a(Logger.o): In function `boost::thread::~thread()':
/media/software/Robots/Common/../boost_1_57_0/boost/thread/detail/thread.hpp:254: undefined reference to `boost::thread::detach()'
../Common/libcommon.a(Logger.o): In function `boost::thread::get_id() const':
/media/software/Robots/Common/../boost_1_57_0/boost/thread/detail/thread.hpp:741: undefined reference to `boost::thread::native_handle()'
../Common/libcommon.a(Logger.o): In function `boost::thread::join()':
/media/software/Robots/Common/../boost_1_57_0/boost/thread/detail/thread.hpp:767: undefined reference to `boost::thread::join_noexcept()'
../Common/libcommon.a(Logger.o): In function `boost::filesystem::exists(boost::filesystem::path const&)':
/media/software/Robots/Common/../boost_1_57_0/boost/filesystem/operations.hpp:404: undefined reference to `boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*)'
../Common/libcommon.a(Logger.o): In function `boost::filesystem::create_directories(boost::filesystem::path const&)':
/media/software/Robots/Common/../boost_1_57_0/boost/filesystem/operations.hpp:523: undefined reference to `boost::filesystem::detail::create_directories(boost::filesystem::path const&, boost::system::error_code*)'
../Common/libcommon.a(Logger.o): In function `boost::detail::thread_data<void (*)()>::~thread_data()':
/media/software/Robots/Common/../boost_1_57_0/boost/thread/detail/thread.hpp:90: undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
../Common/libcommon.a(Logger.o):(.rodata._ZTIN5boost6detail11thread_dataIPFvvEEE[_ZTIN5boost6detail11thread_dataIPFvvEEE]+0x10): undefined reference to `typeinfo for boost::detail::thread_data_base'
collect2: error: ld returned 1 exit status
g++-Wl,--verbose-std=c++11-g-c-pedantic-Wall-Wextra-I../boost_1_57_0-L../boost_1_57_0/stage/lib main.cpp-o main.o-pg
g++-I../boost_1_57_0-L../boost_1_57_0/stage/lib-L../boost_libs/lib-L/usr/kerberos/lib-L/usr/usr/kerberos/lib-L../Common main.o-o-testApp-lz-lkrb5-lk5crypto-lcom_err-lresolv-lm-lpthread-lrt-lrt-lboost_系统-lboost_文件系统-lboost_线程-lboost_日期-Common-time-lco-url
../Common/libcommon.a(Functions.o):在函数`Functions::GetAppPath()':
/media/software/Robots/Common/Functions.cpp:43:对“boost::filesystem::path::parent_path()const”的未定义引用
../Common/libcommon.a(Functions.o):在函数“boost::filesystem::initial_path()”中:
/媒体/软件/机器人/公共/。/boost\u 1\u 57\u 0/boost/filesystem/operations.hpp:583:未定义对“boost::filesystem::detail::initial\u path(boost::system::error\u code*)”的引用
../Common/libcommon.a(Functions.o):在函数“boost::filesystem::system_complete(boost::filesystem::path const&)”中:
/媒体/软件/机器人/公共/。/boost_1_57_0/boost/filesystem/operations.hpp:655:对“boost::filesystem::detail::system_complete(boost::filesystem::path const&,boost::system::error_code*)的未定义引用
../Common/libcommon.a(Functions.o):在函数“unsigned short boost::date\u time::month\u str\u to\u ushort(std::string const&)”中:
/媒体/软件/机器人/公共/。/boost\u 1\u 57\u 0/boost/date\u time/date\u解析。hpp:67:未定义对“boost::gregorian::greg\u month::get\u month\u map\u ptr()的引用”
../Common/libcommon.a(Logger.o):在函数“Logger::Cleanup()”中:
/media/software/Robots/Common/Logger.cpp:84:对“boost::thread::interrupt()”的未定义引用
../Common/libcommon.a(Logger.o):在函数“Logger::InitFile(std::string,bool,std::_Ios\u Openmode)”中:
/media/software/Robots/Common/Logger.cpp:186:对“boost::filesystem::path::parent_path()const”的未定义引用
/media/software/Robots/Common/Logger.cpp:187:对“boost::filesystem::path::parent_path()const”的未定义引用
../Common/libcommon.a(Logger.o):在函数“Logger::Process()”中:
/media/software/Robots/Common/Logger.cpp:241:boost::this\u thread::interruption\u point()的未定义引用
../Common/libcommon.a(Logger.o):在函数“boost::detail::thread_data_base::thread_data_base()”中:
/媒体/软件/机器人/公共/。/boost_1_57_0/boost/thread/pthread/thread_data.hpp:143:未定义对“boost的vtable::detail::thread_data_base”的引用
../Common/libcommon.a(Logger.o):在函数“boost::thread::start_thread()”中:
/媒体/软件/机器人/公共/。/boost_1_57_0/boost/thread/detail/thread.hpp:179:未定义对“boost::thread::start_thread\u noexcept()的引用”
../Common/libcommon.a(Logger.o):在函数“boost::thread::~thread()”中:
/媒体/软件/机器人/通用/。/boost_1_57_0/boost/thread/detail/thread.hpp:254:对“boost::thread::detach()”的未定义引用
../Common/libcommon.a(Logger.o):在函数'boost::thread::get_id()const'中:
/媒体/软件/机器人/公共/。/boost_1_57_0/boost/thread/detail/thread.hpp:741:未定义对“boost::thread::native_handle()的引用”
../Common/libcommon.a(Logger.o):在函数“boost::thread::join()”中:
/媒体/软件/机器人/公共/。/boost_1_57_0/boost/thread/detail/thread.hpp:767:对“boost::thread::join_noexcept()”的未定义引用
../Common/libcommon.a(Logger.o):在函数“boost::filesystem::exists(boost::filesystem::path const&)”中:
/媒体/软件/机器人/公共/。/boost\u 1\u 57\u 0/boost/filesystem/operations.hpp:404:未定义对“boost::filesystem::detail::status”(boost::filesystem::path const&,boost::system::error\u code*)的引用
../Common/libcommon.a(Logger.o):在函数“boost::filesystem::create_目录(boost::filesystem::path const&)”中:
/media/software/Robots/Common/。/boost\u 1\u 57\u 0/boost/filesystem/operations.hpp:523:对“boost::filesystem::detail::create\u目录(boost::filesystem::path const&,boost::system::error\u code*)的未定义引用
../Common/libcommon.a(Logger.o):在函数“boost::detail::thread_data::~thread_data()”中:
/媒体/软件/机器人/公共/。/boost_1_57_0/boost/thread/detail/thread.hpp:90:对“boost::detail::thread_data_base::~thread_data_base()”的未定义引用
../Common/libcommon.a(Logger.o):(.rodata.\u ZTIN5boost6detail11thread\u dataipfvee[\u ZTIN5boost6detail11thread\u dataipfvee]+0x10):对“boost的类型信息::detail::thread\u数据库”的未定义引用
collect2:错误:ld返回了1个退出状态
不用说,该项目作为一个整体编译没有问题

这是我第一次尝试构建一个C++ Linux库,并将它应用到另一个应用程序中,所以我可能会犯下一个新手错误,所以记住这一点。 非常感谢您的帮助

谢谢。

天秤座
g++  -Wl,--verbose -std=c++11 -g -c -pedantic -Wall -Wextra -I../boost_1_57_0 -L../boost_1_57_0/stage/lib main.cpp -o main.o -pg
g++ -I../boost_1_57_0 -L../boost_1_57_0/stage/lib -L../boost_libs/lib -L/usr/lib64 -L/usr/kerberos/lib -L/usr/lib -L../Common main.o -o testApp -lz -lkrb5 -lk5crypto -lcom_err -lresolv -lm -lpthread -lrt -lboost_system -lboost_filesystem -lboost_thread -lboost_date_time -rdynamic -lcurl -lcommon -pg
../Common/libcommon.a(Functions.o): In function `Functions::GetAppPath()':
/media/software/Robots/Common/Functions.cpp:43: undefined reference to `boost::filesystem::path::parent_path() const'
../Common/libcommon.a(Functions.o): In function `boost::filesystem::initial_path()':
/media/software/Robots/Common/../boost_1_57_0/boost/filesystem/operations.hpp:583: undefined reference to `boost::filesystem::detail::initial_path(boost::system::error_code*)'
../Common/libcommon.a(Functions.o): In function `boost::filesystem::system_complete(boost::filesystem::path const&)':
/media/software/Robots/Common/../boost_1_57_0/boost/filesystem/operations.hpp:655: undefined reference to `boost::filesystem::detail::system_complete(boost::filesystem::path const&, boost::system::error_code*)'
../Common/libcommon.a(Functions.o): In function `unsigned short boost::date_time::month_str_to_ushort<boost::gregorian::greg_month>(std::string const&)':
/media/software/Robots/Common/../boost_1_57_0/boost/date_time/date_parsing.hpp:67: undefined reference to `boost::gregorian::greg_month::get_month_map_ptr()'
../Common/libcommon.a(Logger.o): In function `Logger::Cleanup()':
/media/software/Robots/Common/Logger.cpp:84: undefined reference to `boost::thread::interrupt()'
../Common/libcommon.a(Logger.o): In function `Logger::InitFile(std::string, bool, std::_Ios_Openmode)':
/media/software/Robots/Common/Logger.cpp:186: undefined reference to `boost::filesystem::path::parent_path() const'
/media/software/Robots/Common/Logger.cpp:187: undefined reference to `boost::filesystem::path::parent_path() const'
../Common/libcommon.a(Logger.o): In function `Logger::Process()':
/media/software/Robots/Common/Logger.cpp:241: undefined reference to `boost::this_thread::interruption_point()'
../Common/libcommon.a(Logger.o): In function `boost::detail::thread_data_base::thread_data_base()':
/media/software/Robots/Common/../boost_1_57_0/boost/thread/pthread/thread_data.hpp:143: undefined reference to `vtable for boost::detail::thread_data_base'
../Common/libcommon.a(Logger.o): In function `boost::thread::start_thread()':
/media/software/Robots/Common/../boost_1_57_0/boost/thread/detail/thread.hpp:179: undefined reference to `boost::thread::start_thread_noexcept()'
../Common/libcommon.a(Logger.o): In function `boost::thread::~thread()':
/media/software/Robots/Common/../boost_1_57_0/boost/thread/detail/thread.hpp:254: undefined reference to `boost::thread::detach()'
../Common/libcommon.a(Logger.o): In function `boost::thread::get_id() const':
/media/software/Robots/Common/../boost_1_57_0/boost/thread/detail/thread.hpp:741: undefined reference to `boost::thread::native_handle()'
../Common/libcommon.a(Logger.o): In function `boost::thread::join()':
/media/software/Robots/Common/../boost_1_57_0/boost/thread/detail/thread.hpp:767: undefined reference to `boost::thread::join_noexcept()'
../Common/libcommon.a(Logger.o): In function `boost::filesystem::exists(boost::filesystem::path const&)':
/media/software/Robots/Common/../boost_1_57_0/boost/filesystem/operations.hpp:404: undefined reference to `boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*)'
../Common/libcommon.a(Logger.o): In function `boost::filesystem::create_directories(boost::filesystem::path const&)':
/media/software/Robots/Common/../boost_1_57_0/boost/filesystem/operations.hpp:523: undefined reference to `boost::filesystem::detail::create_directories(boost::filesystem::path const&, boost::system::error_code*)'
../Common/libcommon.a(Logger.o): In function `boost::detail::thread_data<void (*)()>::~thread_data()':
/media/software/Robots/Common/../boost_1_57_0/boost/thread/detail/thread.hpp:90: undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
../Common/libcommon.a(Logger.o):(.rodata._ZTIN5boost6detail11thread_dataIPFvvEEE[_ZTIN5boost6detail11thread_dataIPFvvEEE]+0x10): undefined reference to `typeinfo for boost::detail::thread_data_base'
collect2: error: ld returned 1 exit status