Не могу увеличить библиотеку ссылок с g ++ Windows - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь построить следующий код:

Содержимое "Source. cpp"

#include <boost/filesystem.hpp>
using namespace boost::filesystem;

int main(int argc, char* argv[])
{
   path myPath("foo");

   if (exists(myPath)) ...
}

Команда, которую я использую для компиляции это:

g++ -Wall -I D:\boost_1_72_0 Source.cpp -o test -L D:\boost_1_72_0\stage\lib -lboost_filesystem-vc142-mt-gd-x32-1_72

Но я получаю неразрешенные ошибки символов по умолчанию:

C:\Users\User\AppData\Local\Temp\ccskBqAh.o:Source.cpp:(.text$_ZN5boost10filesystem11path_traits7convertEPKcS3_RNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEE[__ZN5boost10filesystem11path_traits7convertEPKcS3_RNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEE]+0x7): undefined reference to `boost::filesystem::path::codecvt()'
... etc

При компиляции в Visual Studio проблем нет.

Ps Пробел после "-L" и "-I" разрешены. И я пытался связать разные библиотеки. Для общего доступа я также использовал #define BOOST_ALL_DYN_LINK на всякий случай.

Shared:

boost_filesystem-vc142-mt-gd-x32-1_72
boost_filesystem-vc142-mt-gd-x64-1_72
boost_filesystem-vc142-mt-x32-1_72
boost_filesystem-vc142-mt-x64-1_72

Stati c:

libboost_filesystem-vc142-mt-gd-x32-1_72
libboost_filesystem-vc142-mt-gd-x64-1_72
libboost_filesystem-vc142-mt-sgd-x32-1_72
libboost_filesystem-vc142-mt-sgd-x64-1_72
libboost_filesystem-vc142-mt-s-x32-1_72
libboost_filesystem-vc142-mt-s-x64-1_72
libboost_filesystem-vc142-mt-x64-1_72

1 Ответ

0 голосов
/ 10 марта 2020

Visual Studio двоичные файлы для повышения несовместимы с MinGW. Вам понадобятся бинарные файлы, которые были созданы с помощью вашей цепочки инструментов. Хотя многие библиотеки c могут использовать двоичные файлы, созданные другими компиляторами c, библиотеки c++, как правило, несовместимы.

Следующий вопрос объясняет трудности несовместимости ABI в c++: Простой способ гарантировать двоичную совместимость для библиотеки C ++, C linking?

...