簡體   English   中英

FreeBSD 中的 Helloworld c++ makefile

[英]Helloworld c++ makefile in FreeBSD

嘗試使用PMAKE (默認 FreeBSD make)編譯我的第一個 C++ 程序。

helloworld.cpp :

#include <iostream>

int main() {

        std::cout << "Hello World!" << std::endl;
        std::cin.get();
}

生成文件

OBJS    = helloworld.o
CFLAGS  = -Wall -Werror -std=c++14

helloworld      : $(OBJS)
        cc $(.ALLSRC) -o $(.TARGET)

helloworld.o    : helloworld.cpp
        cc -c helloworld.cpp

輸出

$make
cc helloworld.o -o helloworld
ld: error: undefined symbol: std::__1::cout
>>> referenced by helloworld.cpp
>>>               helloworld.o:(main)

ld: error: undefined symbol: std::__1::cin
>>> referenced by helloworld.cpp
>>>               helloworld.o:(main)

ld: error: undefined symbol: std::__1::basic_istream<char, std::__1::char_traits<char> >::get()
>>> referenced by helloworld.cpp
>>>               helloworld.o:(main)

ld: error: undefined symbol: std::__1::basic_ostream<char, std::__1::char_traits<char> >::put(char)
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&))

ld: error: undefined symbol: std::__1::basic_ostream<char, std::__1::char_traits<char> >::flush()
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&))

ld: error: undefined symbol: std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long))

ld: error: undefined symbol: std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry()
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long))
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long))

ld: error: undefined symbol: __cxa_begin_catch
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long))
>>> referenced by helloworld.cpp
>>>               helloworld.o:(__clang_call_terminate)

ld: error: undefined symbol: std::__1::ios_base::__set_badbit_and_consider_rethrow()
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long))

ld: error: undefined symbol: __cxa_end_catch
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long))
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long))

ld: error: undefined symbol: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char))
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char))

ld: error: undefined symbol: std::terminate()
>>> referenced by helloworld.cpp
>>>               helloworld.o:(__clang_call_terminate)

ld: error: undefined symbol: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(unsigned long, char)
>>> referenced by helloworld.cpp
ld: error: undefined symbol: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(unsigned long, char)
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(unsigned long, char))

ld: error: undefined symbol: std::__1::ios_base::getloc() const
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::basic_ios<char, std::__1::char_traits<char> >::widen(char) const)

ld: error: undefined symbol: std::__1::locale::~locale()
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::basic_ios<char, std::__1::char_traits<char> >::widen(char) const)
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::basic_ios<char, std::__1::char_traits<char> >::widen(char) const)

ld: error: undefined symbol: std::__1::ctype<char>::id
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::ctype<char> const& std::__1::use_facet<std::__1::ctype<char> >(std::__1::locale const&))

ld: error: undefined symbol: std::__1::locale::use_facet(std::__1::locale::id&) const
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::ctype<char> const& std::__1::use_facet<std::__1::ctype<char> >(std::__1::locale const&))

ld: error: undefined symbol: std::__1::ios_base::clear(unsigned int)
>>> referenced by helloworld.cpp
>>>               helloworld.o:(std::__1::ios_base::setstate(unsigned int))

ld: error: undefined symbol: __gxx_personality_v0
>>> referenced by helloworld.cpp
>>>               helloworld.o:(.eh_frame+0x4AB)
cc: error: linker command failed with exit code 1 (use -v to see invocation

我正在使用默認為clang 10.0.1 FreeBSD 12.2

注意: cc -o helloworld helloworld.cpp也不起作用。

這個問題可能非常基本,但我仍然被困住了。

C 和 C++ 是兩種不同的語言。 使用 C++ 編譯器來編譯 C++。 在您的情況下,C++ 編譯器可能被稱為c++ ,而不是cc

我建議只使用CMake,因此只需使用此內容創建一個名為CMakeLists.txt的文件

cmake_minimum_required(VERSION 3.1)
project(helloworld)

add_executable(${PROJECT_NAME} helloworld.cpp )
set_property(TARGET ${PROJECT_NAME} PROPERTY LINKER_LANGUAGE CXX)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14)

然后就可以在包括 BSD 在內的每個操作系統上編譯您的代碼

mkdir bin
cd bin
cmake ..
cmake -build .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM