Я работаю над проектом, в котором используется несколько внешних библиотек. Эти библиотеки включаются с помощью Conan. Проект в первую очередь написан для Unix, но его также необходимо скомпилировать и запустить в Windows.
Моя текущая проблема заключается в том, что Windows по умолчанию использует fopen()
как O_TEXT
, а Unix ожидает, что это будет O_BINARY
. У меня есть исправление, которое работает для моего собственного кода, просто включите binmode.obj
при ссылке, чтобы изменить это значение по умолчанию на O_BINARY.
Проблема в том, что это не влияет на мои сторонние библиотеки. Поиск в Google для этого не дал многого, большинство предложений, похоже, основаны на том, где вы создаете свой собственный пакет и хотите добавить флаги, а не на том, как добавлять флаги при использовании других пакетов.
Что я пробовал до сих пор:
- Поместите
binmode.obj
перед библиотеками, если порядок компоновки имеет значение. Без разницы. - Добавлено
--env 'CL=link binmode.obj'
кconan install
, но этот флаг не стал частью ни флагов компиляции, ни флагов ссылок.
Любые предложения о том, что я мог бы попробовать?
РЕДАКТИРОВАТЬ: я ошибался в том, что CL не действует. Это было вызвано запутанным выводом. Но я заметил, что CL, по-видимому, применяется как для компилятора, так и для компоновщика, что несколько усложняет выбор флагов. Использование префикса /link позволяет работать с компилятором, но не работает с компоновщиком.
РЕДАКТИРОВАТЬ 2: Больше путаницы... Я не понимал, что синтаксис значения CL был: "<compile flags> /link <link flags>"
. Однако это повлияло на компиляцию, но не на ссылку. Таким образом, эта переменная среды, по-видимому, не может использоваться, чтобы заставить Конана добавить флаг компоновщика для пакетов на основе автоинструментов.