В проектах C++ часто требуется вызывать функции или обращаться к данным в двоичных файлах, таких как статические библиотеки (LIB-файлы), библиотеки DLL, компоненты среды выполнения Windows, компоненты COM или сборки .NET. В этих случаях необходимо настроить проект таким образом, чтобы он мог находить нужные двоичные файлы во время сборки. Конкретный способ сделать это зависит от типа вашего проекта, типа двоичного файла, а также от того, был ли этот двоичный файл собран в том же решении, что и ваш проект.
Если вы хотите использовать скачанную библиотеку с помощью диспетчера пакетов
Если проект статической библиотеки был создан в том же решении:
../<library project name>
. При поиске вы можете использовать предложения технологии IntelliSense.Если статическая библиотека не входит в состав решения:
Если библиотека DLL была собрана в рамках того же решения, что и приложение, выполните те же действия, что и для статической библиотеки.
Если библиотека DLL не входит в состав решения приложения, вам потребуются DLL-файл, заголовки с прототипами для экспортируемых функций и классов, а также LIB-файл, содержащий необходимую для компоновки информацию.
Если в собственном приложении C++ требуется использовать COM-объект и этот объект зарегистрирован, вам достаточно вызвать функцию CoCreateInstance и передать в нее CLSID объекта. Система выполнит поиск объекта в реестре Windows и загрузит его. В проекте C++/CLI COM-объект можно использовать таким же образом. Кроме того, он может использовать его, добавив на него ссылку из списка COM Add References (Добавление ссылок > COM ) и используя ее с помощью вызываемой оболочки среды выполнения.
В проектах универсальной платформы Windows (UWP) или C++/CLI для использования сборок .NET или компонентов среды выполнения Windows можно добавить ссылку на сборку или компонент. В узле Ссылки проекта универсальной платформы Windows (UWP) или C++/CLI представлены ссылки на часто используемые компоненты. Щелкните правой кнопкой мыши узел Ссылки в Обозревателе решений, чтобы открыть диспетчер ссылок и просмотреть доступные в системе компоненты. Нажмите кнопку Обзор, чтобы перейти к папке, в которой находится нужный вам пользовательский компонент. Поскольку сборки .NET и компоненты среды выполнения Windows содержат встроенные сведения о типах, для просмотра их методов и классов можно щелкнуть правой кнопкой мыши и выбрать команду Просмотреть в обозревателе объектов.
Каждый тип ссылки имеет свойства. Свойства можно просмотреть, выбрав ссылку в обозревателе решений и нажав клавиши Alt + ВВОД. Также можно щелкнуть ссылку правой кнопкой мыши и выбрать пункт Свойства. Одни свойства доступны только для чтения, другие можно изменять. Тем не менее обычно эти свойства не требуется изменять вручную.
Свойства ссылки ActiveX доступны только для компонентов COM. Данные свойства отображаются только тогда, когда в панели Ссылки выбран компонент COM. Эти свойства нельзя изменить.
Отображает путь к каталогу элемента управления, на который указывает ссылка.
GUID элемента управления
Отображает GUID для элемента управления ActiveX.
Версия элемента управления
Отображает версию элемента управления ActiveX, на который указывает ссылка.
Имя библиотеки типов
Отображает имя библиотеки типов, на которую указывает ссылка.
Средство программы-оболочки
Отображает средство, которое используется для создания сборки взаимодействия из указанной библиотеки COM или элемента управления ActiveX.
Свойства ссылки на сборку доступны только для ссылок на сборки .NET Framework в проектах C++/CLI. Данные свойства отображаются только тогда, когда в панели Ссылки выбрана сборка .NET Framework. Эти свойства нельзя изменить.
Следующие свойства доступны для различных типов ссылок. Они позволяют задавать способ построения со ссылками.
Копировать локальные
Указывает, следует ли автоматически копировать сборку, на которую указывает ссылка, в целевое расположение во время сборки.
Копировать локальные вспомогательные сборки (C++/CLI)
Указывает, следует ли автоматически копировать вспомогательные сборки ссылочной сборки в целевое расположение во время сборки. Используется, только если для параметра Копировать локальные задано значение true
.
Выходные данные ссылочной сборки
Указывает, что эта сборка используется в процессе сборки. true
означает, что эта сборка используется в командной строке компилятора во время выполнения сборки.
Следующие свойства определяют ссылку проекта на проект из проекта, выбранного в панели Ссылки, на другой проект в том же решении.
Дополнительные сведения см. в статье Управление ссылками в проекте.Компоновать зависимости библиотек
Если это свойство имеет значение True, система проектов установит в зависимом проекте связь с LIB-файлами, создаваемыми независимым проектом. Обычно устанавливается значение True.
Идентификатор проекта
Уникальный идентификатор независимого проекта. Значение свойства — это GUID внутренней системы, который невозможно изменить.
Использовать входные данные зависимостей библиотек
Если это свойство имеет значение False, система проектов не установит в зависимом проекте связь с OBJ-файлами для библиотеки, созданной независимым проектом. Таким образом, это значение отключает инкрементную компоновку. Обычно указывается значение
Следующие свойства существуют в ссылках на компоненты COM и сборки .NET, и их нельзя изменить.
Имя сборки
Отображает имя сборки для сборки, на которую указывает ссылка.
Язык и региональные параметры
Отображает язык и региональные параметры выбранной ссылки.
Описание
Отображает описание выбранной ссылки.
Полный путь
Отображает путь к каталогу сборки, на которую указывает ссылка.
Удостоверение
Для сборок .NET Framework отображает полный путь. Для компонентов COM отображает GUID.
Label
Отображает метку ссылки.
Name
Отображает имя ссылки.
Токен открытого ключа
Отображает токен открытого ключа для идентификации сборки, на которую указывает ссылка.
Строгое имя
true
, если сборка, на которую указывает ссылка, имеет строгое имя. Сборка со строгим именем имеет уникальную версию.
Version
Отображает версию сборки, на которую указывает ссылка.
Справочник по страницам свойств проекта C++
Настройка компилятора C++ и свойства сборки в Visual Studio
Наша компания рада сообщить, что MEMS акселерометры типа ASM 18X компании YMC PIEZOTRONICS INC, внесены в государственный реестр средств измерений. Номер записи в Государственном реестре средств измерений: 88353-23.
Наша компания рада сообщить, что акустические калибраторы Nor1255 и Nor1256 компании Norsonic, внесены в государственный реестр средств измерений. Номер записи в Государственном реестре средств измерений: 88287-23.
Наша компания рада сообщить, что шумомеры Nor150 и Nor140 компании Norsonic, внесены в государственный реестр средств измерений. Номер записи в Государственном реестре средств измерений: 88288-23.
Компания ООО «АСМ Тесты и измерения» приглашает Вас принять участие в семинаре «Современные решения в области виброакустических измерений».
Семинары будут проходить в следующих городах:
Москва, 22.03.2023
Санкт-Петербург, 29.03.2023
Нижний Новгород, 04.04.2023
Казань, 06.04.2023
Челябинск, 12.04.2023
Рады Вам представить системы акустической визуализации российского производства. Три конфигурации: портативная, стационарная, переносная
Компания Xi’an Aigtek Electronic Technology Co. , Ltd объявила о широкомасштабном обновлении линейки своих усилителей мощности.
Наша компания рада сообщить, что акселерометры типа ASM 12X и ASM 22X компании YMC PIEZOTRONICS INC, внесены в государственный реестр средств измерений. Номер записи в Государственном реестре средств измерений: 88132-23.
Наша компания ищет нового сотрудника на должность:
“Менеджер по продажам виброиспытательного оборудования”
В некоторых случаях недостаточно иметь возможность проводить испытания по вертикальной оси. Поэтому Dynalabs начала производить скользящие столы, чтобы инженеры получили возможность проводить испытания в горизонтальном направлении. Горизонтальный стол позволяет проводить испытания на горизонтальную осевую вибрацию.
Новый компактный и легкий электродинамический модальный вибростенд, разработанный с использованием технологии постоянного магнита. Этот вибростенд имеет номинальное усилие до 10 Н.
Компания YMC Piezotronics, Inc. анонсировала два новых прибора: Коммутационный короб и кондиционирующий усилитель 3834T
Вибростенд SVT-08 является компактным вибростендом с постоянным магнитом. Благодаря большой номинальной силе (112Н) вибростенд SVT-08 способен возбуждать механические колебания с большими ускорениями (до 70 g) даже объектов с относительно большой массой (до 2 кг).
Заместитель руководителя управления санитарного надзора Роспотребнадзора Андрей Гуськов рассказал в беседе с RT о российских городах, в которых наиболее остро стоит проблема шума.
Уважаемые коллеги! Рады Вам сообщить что гидрофоны серии TC40XX компании датской компании Teledyne RESON внесены в Госреестр Средств Измерений.
Рады Вам сообщить что аналого-цифровые модули преобразования напряжения IOLITE, а также модули преобразования напряжения KRYPTON словенской компании DEWESOFT внесены в Госреестр Средств Измерений.
Наша компания продолжает искать замену приборам ушедших с российского рынка западных компаний. Представляем Вам лазерные виброметры аналоги виброметров от компании Polytec. Наш новый китайский партнер производит четыре лазерных виброметра аналогичных по характеристикам виброметрам Polytec.
Уважаемые коллеги сейчас происходит удивительный рост курса рубля по отношению ко всем валютам мира. Рубль стал самой сильной валютой за последний месяц и укрепился на 11% по отношению к доллару. Но этот рассказ не об экономике, а о технике. Поэтому если кратко, то это значит, что зарубежное оборудование становится все дешевле и дешевле. На фоне санкций стало сложно или практически невозможно привозить приборы из США и Европы, российские приборы и датчики в связи с ростом курса стали значительно дороже и только китайское оборудование сейчас в самом выгодном положении, цена на него падает, нет проблем с его доставкой и самое главное оно по качеству ничем не уступает европейским, американским и российским аналогам.
Наша компания продолжает реализовывать процесс замещения европейских и американских производителей на производителей из Китая. Новым партнером нашей компании стала компания ECON.
В марте мы подписали дистрибьюторское соглашение с Китайской компанией Dynatronic Corporation Ltd, который предлагает универсальные решения позволяющие анализировать различные физические характеристики.
Наш партнер, компания Dewesoft анонсировала новый усилитель в линейке продуктов SIRIUS с прямым входом для 200-вольтовых микрофонов с внешней поляризацией.
Сервисное обслуживание и ремонт измерительных приборов Bruel & Kjaer, Dewesoft, OnoSokki, LDS
Более старые >>
Задавать вопрос
спросил
Изменено 5 лет, 7 месяцев назад
Просмотрено 879 раз
Из учебника по nasm здесь я получил следующий код для программы сборки:
global main внешние путы раздел . текст основной: мов рди, сообщение колл ставит мов ракс, 0 рет сообщение: db "Привет, мир", 0
Я собираю его с помощью nasm -felf64 hola.asm
Однако мне не удалось связать получившийся файл hola.o.
Я пытался (согласно руководству) запустить gcc hola.o
, но это приводит к следующей ошибке:
/usr/local/bin/ld: ошибка: hola.o: требуется динамическая релокация R_X86_64_PC32 против «помещений», которая может переполниться во время выполнения; перекомпилировать с -fPIC
collect2: ошибка: ld вернул 1 статус выхода
передача -fPIC
в не помогает, как и -Wl,-I/lib/ld-2.25.so
.
Мои попытки связать напрямую с ld не увенчались успехом, я думаю, потому что я упускаю то, что на самом деле определяет символ _start
, что приводит к ошибке seg, когда я запускаю полученный исполняемый файл.
Я также пытался добавить стандартную версию
, как было предложено в разделяемой библиотеке R_X86_64_PC32, но это тоже не работает.
Я также пытался написать основной метод на C, а затем вызвать функцию, которая вызывает puts в ассемблере. Это также дает мне ошибку динамического перемещения.
Как связать файл сборки nasm, чтобы он мог вызывать функцию в libc на x86_64 linux?
Я смог заставить это работать, изменив 9Вызов 0017 ставит
ставит wrt ..plt
.Я понял это после прочтения раздела 9.2.5 документации nasm: http://www.nasm.us/doc/nasmdoc9.html#section-9.2.5.
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Электронная почта
Требуется, но никогда не отображается
Электронная почта
Требуется, но не отображается
Некоторые части FFmpeg не могут быть собраны с версией 2.15 GNU ассемблер, который до сих пор предоставляется несколькими дистрибутивами AMD64. К убедитесь, что ваш компилятор действительно использует требуемую версию газа после обновления binutils запустите:
$(gcc -print-prog-name=as) --версия
Если нет, то вам следует установить другой компилятор, который не имеет
жестко запрограммированный путь к газу. В худшем случае передать --disable-asm
настроить.
Если вы скомпилировали библиотеки FFmpeg статически и хотите использовать их для
создать свою собственную общую библиотеку, вам может потребоваться принудительная поддержка PIC (с --enable-pic
во время настройки FFmpeg) и добавьте следующую опцию
в ваш проект LDFLAGS:
-Wl,-Bсимволический
Если для вашей целевой платформы требуются независимые от позиции двоичные файлы, вам следует
передайте правильный флаг связывания (например, -pie
) в --extra-ldexeflags
.
BSD make не будет собирать FFmpeg, вам необходимо установить и использовать GNU Make
( gmake
).
GNU Make требуется для сборки FFmpeg, поэтому вам нужно вызвать ( gmake
),
стандартный Solaris Make не подойдет. При сборке с не-с99 фронтенд
(gcc, generic suncc) добавить либо --extra-libs=/usr/lib/values-xpg6. o
или --extra-libs=/usr/lib/64/values-xpg6.o
в параметры конфигурации
поскольку libc по умолчанию не совместима с c99. Зонды, выполненные
configure может вызвать исключение, ведущее к смерти самого configure
из-за ошибки в системной оболочке. Просто вызовите другую оболочку, например
bash напрямую, чтобы обойти это:
баш ./настроить
Инструментарий, поставляемый с Xcode, достаточен для создания базового неускоренный код.
Для Mac OS X на PowerPC или ARM (iPhone) требуется препроцессор от https://github.com/FFmpeg/gas-preprocessor или https://github.com/yuvi/gas-preprocessor (в настоящее время устарел) для создания оптимизированного сборочные функции. Поместите сценарий Perl куда-нибудь в вашем PATH, конфигурация FFmpeg подберет его автоматически.
Mac OS X на платформах amd64 и x86 требует nasm
для сборки большинства
оптимизированные функции сборки. Финк,
Gentoo Префикс,
доморощенный
или MacPorts могут легко предоставить его.
Использование кросс-компилятора предпочтительнее по разным причинам. http://www.delorie.com/howto/djgpp/linux-x-djgpp.html
Информацию о компиляции FFmpeg в OS/2 см. http://www.edm2.com/index.php/FFmpeg.
Чтобы получить справку и инструкции по сборке FFmpeg под Windows, см. справочный форум FFmpeg для Windows по адресу http://ffmpeg.zeranoe.com/forum/.
FFmpeg может быть собран для исходной работы в Windows с использованием MinGW-w64 набор инструментов. Установите последние версии MSYS2 и MinGW-w64 с http://msys2.github.io/ и/или http://mingw-w64.sourceforge.net/. Вы можете найти подробные инструкции по установке в разделе загрузок и FAQ.
Примечания:
make -r
вместо обычного make
. Этот
ускорение близко к несуществующему для обычных одноразовых сборок и только
заметно при запуске make во второй раз (например, во время сделать установить
). pkg-config
установлены. ./configure --enable-shared
при настройке FFmpeg,
вы можете собрать библиотеки FFmpeg (например, libavutil, libavcodec,
libavformat) в виде DLL. Среда MSYS2 MinGW-w64 предоставляет готовые наборы инструментов и зависимости
через пакман
.
Обязательно используйте mingw64_shell.bat или mingw32_shell.bat , чтобы иметь
правильная среда MinGW-w64. Установка по умолчанию предоставляет ярлыки для
их под MinGW-w64 Win64 Shell
и MinGW-w64 Win32 Shell
.
# обычные пакеты msys2 pacman -S сделать pkgconf diffutils # пакеты и цепочки инструментов mingw-w64 pacman -S mingw-w64-x86_64-nasm mingw-w64-x86_64-gcc mingw-w64-x86_64-SDL2
Чтобы установить 32 бита, замените x86_64
с i686
в приведенной выше команде.
FFmpeg можно собрать с помощью MSVC 2013 или более поздней версии.
Вам потребуются следующие предварительные условия:
Чтобы настроить правильную среду в MSYS2, вам нужно запустить msys_shell.bat
из
командную строку Visual Studio или компилятора Intel.
Поместите yasm.exe
где-нибудь в PATH
.
Затем убедитесь, что любые другие заголовочные файлы и библиотеки, которые вы хотите использовать, такие как zlib,
находится в месте, которое может видеть компилятор. Сделайте это, изменив LIB
и ВКЛЮЧИТЕ переменные среды
, чтобы включить в стиле Windows пути к этим каталогам. Как вариант, можно попробовать использовать --extra-cflags
/ --extra-ldflags
настроить параметры.
Наконец, запустите:
Для MSVC: ./configure --toolchain=msvc Для ИКЛ: ./configure --toolchain=icl делать сделать установку
Если вы хотите скомпилировать разделяемые библиотеки, добавьте --enable-shared
в свой
настроить параметры. Обратите внимание, что из-за того, как MSVC и ICL обрабатывают импорт DLL и
экспорта, вы не можете одновременно компилировать статические и разделяемые библиотеки, и
включение общих библиотек автоматически отключит статические.
Примечания:
Если вы планируете связываться со статическими библиотеками, созданными MSVC, вам потребуется
чтобы убедиться, что для Runtime Library
установлено значение Многопоточность (/MT)
в настройках вашего проекта.
Вам нужно будет определить встроенный
для чего-то, что понимает MSVC:
#define встроенный __inline
Также обратите внимание, что, как указано в Microsoft Visual C++ , вам потребуется совместимый с MSVC файл inttypes.h.
Если вы планируете использовать библиотеки импорта, созданные dlltool, вы должны
набор Ссылки с
по Нет (/OPT:NOREF)
при оптимизации компоновщика
параметры, в противном случае результирующие двоичные файлы не будут работать во время выполнения.
Это не требуется при использовании библиотек импорта, сгенерированных lib.exe
.
Об этой проблеме сообщается вверх по течению на
http://sourceware.org/bugzilla/show_bug.cgi?id=12633.
Для создания библиотек импорта, которые работают с параметром /OPT:REF
.
(который включен по умолчанию в режиме выпуска), выполните следующие действия:
В качестве альтернативы в обычном приглашении командной строки вызовите vcvars32.bat который устанавливает переменные среды для инструментов Visual C++ (стандартное расположение для этого файла что-то вроде C:\Program Files (x86_\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat ).
lib.exe
:библиотека /machine:i386 /def:..\lib\foo-version.def /out:foo.lib
Замените foo-version
и foo
соответствующими именами библиотек.
Необходимо использовать инструменты кросс-компиляции MinGW, доступные по адресу http://www.mingw.org/.
Затем настройте FFmpeg со следующими параметрами:
./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc-
(вы можете изменить кросс-префикс в соответствии с префиксом, выбранным для инструменты MinGW).
Тогда вы можете легко протестировать FFmpeg с помощью Wine.
Используйте Cygwin 1.7.x т.к. в устаревших версиях Cygwin 1.5.x отсутствует llrint() в своей библиотеке C.
Установите Cygwin со всеми «базовыми» пакетами, а также следующие «Devel»:
binutils, gcc4-core, make, git, mingw-runtime, texinfo
Для запуска FATE вам также потребуются следующие пакеты «Utils»:
диффитилс
Если вы хотите собрать FFmpeg с дополнительными библиотеками, скачайте Cygwin Пакеты «Devel» для Ogg и Vorbis из любого репозитория пакетов Cygwin:
libogg-devel, libvorbis-devel
Эти пакеты библиотек доступны только из Порты Cygwin:
yasm, libSDL-devel, libgsm-devel, libmp3lame-devel, speex-devel, libtheora-devel, libxvidcore-devel
Для x264 рекомендуется собирать его из исходного кода, так как он тоже развивается быстро обновлять порты Cygwin.
С помощью Cygwin можно создавать двоичные файлы Windows, которым не требуется cygwin1.