cuốn sách gpt4 ai đã làm

Liên kết các sự cố với boost::program_options trên OSX bằng LLVM

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 17:38:20 26 4
mua khóa gpt4 Nike

Do sự cố với Boost 1.49, tôi không thể vượt qua giai đoạn liên kết của chương trình C++ của mình. Tôi đã chuyển sang C++ (-std=c++11 -libc=libc++) và nó hoạt động với một đoạn mã khác (cũng sử dụng boost). Boost được cài đặt bằng homebrew:

tăng cường cài đặt bia --universal --with-mpi --with-icu

rắc rối bắt đầu boost::program_options. Tôi gặp lỗi liên kết như thế này:

  "boost::program_options::validate(boost::any&, std::__1::vector<>, std::__1::allocator  >, std::__1::allocator<>, std::__1::allocator > > > const&, std::__1::basic_string, std:: __1::allocator >*, int)", được tham chiếu từ:

... vân vân. ...

ld: không tìm thấy (các) ký hiệu cho kiến ​​trúc x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Điều này hơi lạ, vì khi thực thi nm show trên thư viện được sử dụng, các ký hiệu dường như vẫn ở đó:

nm -U /usr/local/lib/libboost_program_options-mt.dylib grep xác thực
0000000000019880 - 01 0000 FUN __ZN5boost15program_options8validateERNS_3anyERKSt6vectorISbIwSt11char_traitsIwESaIwEESaIS7_EEPSsi
0000000000019880 T __ZN5boost15program_options8validateERNS_3anyERKSt6vectorISbIwSt11char_traitsIwESaIwEESaIS7_EEPSsi
00000000000199e0 - 01 0000 FUN __ZN5boost15program_options8validateERNS_3anyERKSt6vectorISbIwSt11char_traitsIwESaIwEESaIS7_EEPbi
00000000000199e0 T __ZN5boost15program_options8validateERNS_3anyERKSt6vectorISbIwSt11char_traitsIwESaIwEESaIS7_EEPbi
0000000000019930 T __ZN5boost15program_options8validateERNS_3anyERKSt6vectorISsSaISsEEPSsi
0000000000019930 - 01 0000 FUN __ZN5boost15program_options8validateERNS_3anyERKSt6vectorISsSaISsEEPSsi
0000000000019c70 - 01 0000 FUN __ZN5boost15program_options8validateERNS_3anyERKSt6vectorISsSaISsEEPbi
0000000000019c70 T __ZN5boost15program_options8validateERNS_3anyERKSt6vectorISsSaISsEEPbi

Tôi đã thử thuyết phục homebrew sử dụng clang thay vì gcc để biên dịch tăng cường bằng cách đặt CXX và CXX_FLAGS tương ứng trước khi cài đặt. Tôi không chắc liệu mình có thành công hay không.

Bất kỳ trợ giúp được đánh giá rất cao.

câu trả lời hay nhất

Bạn sẽ cần biên dịch lại boost bằng cờ clang và std11, thư viện libc++ không tương thích nhị phân với libstdc++ được cài đặt trong OSX (phiên bản cũ hơn của gcc trước khi đổi sang gpl3). Nếu phiên bản clang của bạn là 3.1 trở lên thì bạn có thể sử dụng (nếu không hãy thay đổi c++11 thành c++0x để có phiên bản cũ hơn).

./bootstrap.sh
xây dựng mkdir
sudo ./bjam toolset=clang cxxflags="-std=c++0x -stdlib=libc++"variant=release link=static threading=multi run-link=shared --build-dir=Build --layout=system -- không cómpi --không có-python cài đặt --prefix=/usr/local

Tất nhiên bạn có thể thay đổi bất cứ điều gì trong đó nếu bạn muốn, ngoại trừ

toolset=clang cxxflags="-std=c++0x -stdlib=libc++"

Điều này sẽ làm việc cho bạn.

Về c++ - Sử dụng LLVM trên OSX để liên hệ câu hỏi với boost::program_options, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/11081818/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress