Как создать lib файл
Как сделать .lib файл, когда есть .dll файл и заголовочный файл - c++
Я пытаюсь создать приложение в visual studio, которое сможет получить доступ к DLL файлу, который уже существует. Мне нужно приложение для вызова подпрограмм. У меня также есть файл заголовка, который уже существует.
Я изучаю в Интернете и обнаружил, что мне нужно создать .lib файл. Если посмотреть на подобные вопросы, здесь я нашел ссылку: http://support.microsoft.com/kb/131313 Однако я не могу следовать указаниям.
Информация в ссылке говорит о создании файла DEF (я читал в другом месте, что это нужно скомпилировать как DLL с тем же именем, но не уверен, что это имя, с тем же именем, что и DLL файл?), Но я не понимаю первого направления: "Использовать DUMPBIN/EXPORTS". Затем мне нужно "заглушить" функции, а затем что-то делать с файлами .OBJ(я не знаю, что это за файлы).
Есть ли пошаговые инструкции, похожие на приведенные выше ссылки, которые легко отслеживать?
hde истКак создать библиотеку импорта (.lib) и DLL в Visual C++?
Я хочу иметь один проект Visual Studio, который создает DLL-файл и библиотеку импорта (.файл lib). (Библиотека импорта-это статически связанная библиотека, которая заботится о загрузке этого DLL-файла в другие проекты, которые его используют).
поэтому я пошел в Visual Studio C++ 2008 Express Edition, создал новый проект библиотеки классов типов и установил "тип конфигурации" как "Dyanamic Library (.файл DLL.")
но когда я создаю решение, единственный соответствующий выходной файл Я вижу, что это DLL-файл; я не вижу, как генерируется файл LIB. Я просмотрел каталог проекта и все подкаталоги (Release и Debug).
Я считаю, что можно построить LIB и DLL-файл одновременно, потому что на MSDN говорится: "компоновщик создает библиотеку импорта при построении DLL." и другой пользователь этого веб-сайта создает LIB и DLL файлы одновременно с помощью Visual C++.
Итак, как я могу это сделать это?
4 ответов
выбрав "библиотека классов", вы случайно сказали ей сделать библиотеку .Net, используя CLI (управляемое) расширение C++.
вместо этого создайте проект Win32 и в настройках приложения на следующей странице выберите "DLL".
вы также можете сделать DLL MFC или ATL DLL из этих вариантов библиотеки, если вы хотите пойти по этому маршруту, но похоже, что вы этого не делаете.
имеет ли ваш проект DLL какой-либо фактический экспорт? Если экспорта нет, компоновщик не будет создавать библиотеку импорта .файла lib.
в не Экспресс-версии VS имя libray импорта указано в настройках проекта здесь:
Configuration Properties/Linker/Advanced/Import Library
Я предполагаю, что это то же самое в Express (если он даже предоставляет возможность настроить имя).
72
автор: Michael Burr
ОК, поэтому я нашел ответ от http://binglongx.wordpress.com/2009/01/26/visual-c-does-not-generate-lib-file-for-a-dll-project/ говорит, что эта проблема была вызвана не экспортом каких-либо символов и далее инструктирует о том, как экспортировать символы для создания файла lib. Для этого добавьте следующий код .H файл для вашей библиотеки DLL.
#ifdef BARNABY_EXPORTS #define BARNABY_API __declspec(dllexport) #else #define BARNABY_API __declspec(dllimport) #endif
где BARNABY_EXPORTS и BARNABY_API являются уникальными определениями для вашего проекта. Затем каждой функции экспорта вы просто предваряется:
BARNABY_API int add(){ }
эту проблему можно было бы предотвратить, щелкнув поле экспорт символов в Мастере DLL нового проекта или проголосовав " да " за лоботомии для программистов.
вы также должны указать имя Def в настройках проекта здесь:
Конфигурация > Свойства / Вход / Дополнительно / Модуль > Файл Определения
8
автор: Chris Long Gue
Как создать dll в Visual Studio
DLL (Dynamic Link Library) – динамически подключаемая библиотека функций. Для библиотек DLL предполагается многократное использование различными программами. Поговорим о том, как создать библиотеку DLL в Visual Studio, используя языки программирования C и C#.
Создание dll на языке Си
Создаем в Visual Studio новый проект – консольное приложение.
В запустившемся “Мастере приложений Win32″ жмем кнопку “Далее”. В следующем окне выбираем тип приложения: “Библиотека DLL”; также ставим галочку напротив параметра “Пустой проект”. Жмем кнопку “Готово”.
Теперь необходимо создать два файла исходного кода: “main.cpp” и “main.def”. Для этого в “обозревателе решений” нажмем правой кнопкой мыши на папку “Файлы исходного кода”, далее – “Добавить” – “Создать элемент”.
В появившемся окне “Добавление нового элемента” во вкладке “Код” представлены типы файлов, которые нам необходимы. Создадим “main.cpp” и “main.def”.
В итоге обозреватель решений будет выглядеть вот так:
Перейдем к файлу “main.cpp”. Для примера, напишем две функции add и sub, выполняющих сложение и вычитание соответственно для двух целых чисел.
int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; }
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; } |
Перед каждой функцией необходимо добавить модификатор __declspec(dllexport) (два нижних подчеркивания). Этот модификатор разрешает экспорт функции из библиотеки DLL для ее использования в других приложениях. В итоге получим такой код:
__declspec(dllexport) int add(int a, int b) { return a + b; } __declspec(dllexport) int sub(int a, int b) { return a - b; }
__declspec(dllexport) int add(int a, int b) { return a + b; }
__declspec(dllexport) int sub(int a, int b) { return a - b; } |
Теперь перейдем к файлу “main.def”. В нем необходимо указать: название библиотеки DLL, ключевое слово EXPORTS, а после него названия функций, экспорт которых необходимо разрешить. В нашем случае, получится вот так:
LIBRARY "dll_vscode" EXPORTS add sub
LIBRARY "dll_vscode" EXPORTS add sub |
Осталось построить решение. Для этого во вкладке “ПОСТРОЕНИЕ” нажмем кнопку “Построить решение” (Ctrl+Shift+B).
В итоге, в папке с проектом будет создан файл DLLvscode.dll.
На этом создание DLL-файла завершено.
Если вы хотите скачать исходник проекта в Visual Studio, то нажмите на кнопку ниже:
Скачать исходник на Си
Создание dll на языке C#
В языке программирования C#, в отличие от языка C, при создании dll-файлов, не нужно указывать модификатор __declspec(dllexport). И в наличии файла “main.def” также нет необходимости.
Создадим в Visual Studio новый проект на языке C#: “Библиотеку классов”.
На основе функций add и sub, описанных выше, создадим в классе vscode соответствующие методы. Пространство имен указывать не нужно.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; public class vscode { public int add(int a, int b) { return a + b; } public int sub(int a, int b) { return a - b; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
public class vscode { public int add(int a, int b) { return a + b; }
public int sub(int a, int b) { return a - b; } } |
Построим решение проекта (Ctrl+Shift+B). В папке Debug будет лежать созданный dll-файл.
Скачать исходник проекта можно ниже:
Скачать исходник C#
Как создать dll в Visual Studio
4.44 (88.75%) 16 votes
Поделиться в соц. сетях:
CMake — создание динамических библиотек / Хабр
Введение
CMake (от англ. cross platform make) — это кроссплатформенная система автоматизации сборки программного обеспечения из исходного кода.
CMake не занимается непосредственно сборкой, a лишь генерирует файлы управления сборкой из файлов CMakeLists.txt.
Динамические библиотеки. Теория
Создание динамических библиотек со статической линковкой в ОС Windows отличается от ОС GNU/Linux.
На ОС Windows для этого требуется связка .dll (dynamic link library) + .lib (library) файлов.
На ОС GNU/Linux для этого нужен всего лишь один .so (shared object) файл.
Динамические библиотеки. Практика
На практике хочется писать удобный, одинаковый код на обеих ОС.
В каждом проекте (или на несколько проектов одна) присутствовала условная компиляция:
#ifndef __linux__ #if defined( <target_name>_EXPORTS ) #define DLL_<target_name>_EXPORT __declspec(dllexport) #else // !BUILDING_DLL #define DLL_<target_name>_EXPORT __declspec(dllimport) #endif // BUILDING_DLL #else #define DLL_<target_name>_EXPORT #endif // __linux__
Соответственно, для каждого экспортируемого класса из библиотеки необходимо прописать данный макрос:
class DLL_<target_name>_EXPORT <class_name>
В данном случае, на ОС Windows экспортируются все классы/методы, которые помечены данным макросом, а на ОС GNU/Linux, по умолчанию, всё экспортируется, т.к. нет макроса для скрытия классов/методов.
С выходом CMake версии 3.4.0, стало возможным создание библиотек с классами, которые экспортируются по умолчанию. Для этого в каждой цели (target), которые объявлены как SHARED (динамическая библиотека), необходимо включить свойство:
set ( CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
Пример небольшой библиотеки:
# Проверка версии CMake cmake_minimum_required( VERSION 3.4.0 ) # Если версия установленой программы ниже, то ошибка выполнения # Название проекта и проверка доступности компиляторя с++ project( shared_lib CXX ) # Установка переменной со списком исходников set( SOURCE_LIB example.cpp ) # Включение экспорта всех символов для создания динамической библиотеки set ( CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON ) # Создание динамической библиотеки с именем example add_library( example SHARED ${SOURCE_LIB} )
И убрать определение и использование макросов из кода:
DLL_<target_name>_EXPORT
Данное свойство автоматически создает module definition (.def) со всеми глобальными символами из .obj файла для динамической библиотеки на ОС Windows.
Далее данный файл (.def) передается компоновщику для создания .lib файла. На выходе на ОС Windows получается связка .lib + .dll
Итоги
Код стал более читабельным, нет лишних строчек. И вероятность появления ошибки во время неправильного написания блока условной компиляции и определения макроса среди разработчиков сведена к нулю. В CMakeLists файле всего одна дополнительная строчка.
Создаём библиотеку по последнему слову техники / Хабр
Привет, Хабр. Это статья о том как написать Hello world по последнему слову техники.
В конце мы получим hello world библиотеку которая:
- Использует typescript
- Заботится о codestyle
- Генерирует доку
- Проводит тесты
Начало начал
В новой папке инициируем git и npm
git init npm init
При настройке npm
package name: (bestlibever) version: (1.0.0) 0.1.0 description: Best lib forever entry point: (index.js) test command: jest git repository: keywords: author: >MAX_ (maximmasterr) license: (ISC) MIT
Структура проекта
В проекте будут следующие директории:
- src – Здесь будут лежать файлы самой библиотеки (typescript)
- lib – Сюда tsc положит скомпилированные файлы из src
- test – Здесь лежат тесты
- examples – Примеры использования
Также необходимо добавить в .gitignore
:
lib/ node_modules/
Typescript
Теперь установим и настроим typescript:
npm i typescript -D
И создадим файл с именем tsconifg.json
{ "compilerOptions": { "target": "es5", "module": "commonjs", "declaration": true, "outDir": "./lib", "strict": true, "sourceMap": true }, "include": ["src"], "exclude": ["node_modules", "**/__tests__/*"] }
Теперь сделаем основной файл лежащий src/index.ts
export function helloWorld(){ return 'Hello world!' }
Также добавим в package.json
скрипты:
"build": "tsc", "dev": "tsc --watch"
Теперь мы можем запустить разовое построение помощью:
npm run build
И многоразовое:
npm run dev
Codestyle
Для проверки стиля кода будем использовать tslint и prettier, а также запускать это перед коммитом.
Установим tslint, prettier, husky:
npm i tslint tslint-config-prettier prettier husky -D
Настроим prettier создав файл .prettierrc
с содержимым
{ "printWidth": 120, "trailingComma": "none", "singleQuote": true }
Добавим скрипт для запуска prettier
"prettier": "npx prettier --write src/* test/* example/*"
Настроим tslint создав файл tslint.json
с содержимым
{ "extends": ["tslint:recommended", "tslint-config-prettier"], "rules": { "curly": false, "ordered-imports": false, "interface-name": [true, "never-prefix"] } }
Добавляем скрипт tslint и codestyle:
"tslint": "tslint -p tslint -p tsconfig.json", "codestyle": "npm run prettier && npm run tslint"
Теперь сделаем что бы перед коммитом запускался codestyle добавим в package.json
:
"husky": { "hooks": { "pre-commit": "npm run codestyle" } }
Документация
Для генерации веб страниц из md используем docsify и для генерации документации из api tsdoc
Установим их
npm i docsify-cli typedoc -D
В папке docs создадим README.md
:
# Best lib ever Best lib ever `helloWorld` return `'hello world'` ## Example ``js const a = require('') console.log(a.helloWorld()) // prints 'Hello world!' ``
Также добавим moreExample.md
Исходник лежит здесь
Дальше выполните
npx docsify init ./docs
Настроим sidebar в docsify создав файл sidebar.md
# Best lib ever * [Best lib ever](/) * [More examples](/moreExamples)
Теперь, чтобы просмотреть всю эту красоту добавим скрипт
"docsify": "docsify serve ./docs"
И запустим
npm run docsify
Теперь займёмся статическим документирование методов
Для начала добавим описание функции в коде:
/** * Returns `Hello world!` */
В .gitinore
добавим docs/api
Добавим скрипт для typedoc
"typedoc": "typedoc --out ./docs/api ./src --mode file --readme docs/README.md"
И наконец добавим финальный скрипт для доки
"docs": "npm run typedoc && npm run docsify"
Всё теперь для просмотра доки достаточно
npm run docs
Тесты
Установим jest
npm install --save-dev @types/jest @types/node jest ts-jest typescript
Создадим конфиг jest.config.js
module.exports = { roots: ['/src'], transform: { '^.+\\.tsx?$': 'ts-jest', }, testRegex: '(/__test__/.*|(\\.|/)(test|spec))\\.tsx?$', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], }
Создадим тест(test/index.ts
):
import { helloWorld } from "../src"; test('Should return helloWorld', () => { expect(helloWorld()).toBe('Hello world!') })
И теперь запуск тестов возможен по
npm test
Обобщим
Теперь мы можем
npm run build # Запустить построение npm run dev # Запустить авто построение npm run codestyle # Проверка стиля кода npm run docs # Посмотреть доку npm test # Прогнать тесты
Финальный репозиторий github
Что это и как его открыть?
Если ваш файл LIB связан с аппаратным обеспечением на вашем компьютере, чтобы открыть файл вам может потребоваться обновить драйверы устройств, связанных с этим оборудованием.
Эта проблема обычно связана с типами мультимедийных файлов, которые зависят от успешного открытия аппаратного обеспечения внутри компьютера, например, звуковой карты или видеокарты. Например, если вы пытаетесь открыть аудиофайл, но не можете его открыть, вам может потребоваться обновить драйверы звуковой карты.
Совет: Если при попытке открыть файл LIB вы получаете сообщение об ошибке, связанной с .SYS file, проблема, вероятно, может быть связана с поврежденными или устаревшими драйверами устройств, которые необходимо обновить. Данный процесс можно облегчить посредством использования программного обеспечения для обновления драйверов, такого как DriverDoc.
Создайте файл DLL и LIB с помощью командной строки из Visual Studio C ++ 2010
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
c ++ - Как создать библиотеку?
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
c # - Создание файла .dll из файла .lib
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
android - Как создать файл .so lib для проекта NDK?
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
c - как создать общую библиотеку из объектов или статической библиотеки
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
c ++ - Как создать общую библиотеку с помощью cmake?
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся p