0 / 0 / 0
Регистрация: 04.07.2013
Сообщений: 17
|
|||||||||||
1 | |||||||||||
Dll без внешних зависимостей?05.08.2015, 17:23. Показов 4692. Ответов 20
Метки нет (Все метки)
Добрый день,
Волею судьбы приходится писать программы для C++Builder XE8. К несчастью, библиотеки для работы с матрицами (решения уравнения вида Ax = b) подключить в эту "чудесную во всех отношениях" среду разработки не удается. Я написал небольшой класс в VisualStudio и пытаюсь собрать из него библиотеку, чтобы избежать вышеописанной проблемы. Однако, разобраться как же все же нужно собирать библиотеки чтением гайдов и форумов не получилось. Заголовочный файл моего класса:
Подскажите пожалуйста, можно ли собрать либу из класса так, чтобы никие сторонние библиотеки не требовались? Поскольку, лишь в этом случае удастся использовать класс в C++Builder XE8/ Спасибо.
0
|
05.08.2015, 17:23 | |
Ответы с готовыми решениями:
20
Проверка зависимостей DLL Компиляция без зависимостей Доступ к переменным в DLL программе из внешних програм Класс без конструктора. Ошибка 1 неразрешенных внешних элементов |
9 / 9 / 0
Регистрация: 26.01.2015
Сообщений: 94
|
|
06.08.2015, 11:50 | 2 |
Киньте кусок кода в котором вы свою Dll подключаете.
0
|
0 / 0 / 0
Регистрация: 04.07.2013
Сообщений: 17
|
||||||
06.08.2015, 13:27 [ТС] | 3 | |||||
Я ее не подключаю, поскольку так и не разобрался в том, как собрать либу включив в нее
0
|
9 / 9 / 0
Регистрация: 26.01.2015
Сообщений: 94
|
|
06.08.2015, 15:04 | 4 |
Вы точно установили весь SDK включая .h и .lib файлы?
0
|
0 / 0 / 0
Регистрация: 04.07.2013
Сообщений: 17
|
||||||
06.08.2015, 15:09 [ТС] | 5 | |||||
0
|
0 / 0 / 0
Регистрация: 04.07.2013
Сообщений: 17
|
|
06.08.2015, 15:20 [ТС] | 7 |
Он есть, я указал путь к нему в настройках проекта, но компилятор не может это скомпилировать. В самой библиотеке есть строка в которой написано, что этот компилятор не поддерживается (нужно вручную указать некоторое значение). И на этом вся работа программы заканчивается.
0
|
06.08.2015, 15:34 | 8 |
Насколько я знаю не удастся в любом случае, экспорт классов из DLL непереносимая шутка (между разными компиляторами) сам по себе,
C++Builder тут не причем. Хотите переносимости - экпортируйте функции (не классы) в стиле Си (Си типы,без структур идр составных типов в параметрах, без декорирования тобишь extern "C") И естественно это убьет все удобство при экспорте. И как вариант поискать библиотеки для работы с матрицами написанные для Delphi/С++Builder
0
|
0 / 0 / 0
Регистрация: 04.07.2013
Сообщений: 17
|
|||||||||||
06.08.2015, 15:45 [ТС] | 9 | ||||||||||
То есть, вариант с собрать статическую либу в которую запихнуть
Да и ко всему прочему, нужна совместимость C++Builder XE2 - C++Builder XE8 + у Embercadero (разработчиков C++Builder есть партнеры, которые нечто для научных сотрудников и инженеров развивают (работу с матрицами, решение уравнений) однако это все платное по)
0
|
06.08.2015, 16:03 | 10 |
Cтатичесую тем более.
Добавлено через 1 минуту Это за висит от разрядности компилятора x32 -старый компилятор он практически не поддерживает стандарт. a x64 новый с ним не должно быт проблем. Добавлено через 45 секунд Ну так и сама среда С++Bulder платная....
0
|
06.08.2015, 16:07 | 12 |
MitrandirSergey
Кстати а FMX не подходит: http://docwiki.embarcadero.com... s.Vector3D http://docwiki.embarcadero.com... D.Matrix3D
0
|
0 / 0 / 0
Регистрация: 04.07.2013
Сообщений: 17
|
||||||
06.08.2015, 16:21 [ТС] | 13 | |||||
К сожалению нет, поскольку могут понадобиться вектора произвольной длины (а здесь похоже только ). И решение уравнения вида Ax = b.
Но это отличная идея, вдруг у них для делфи есть соответствующие либы портированные в С++. Спасибо. Поищу внимательнее. По поводу компилятора, мне нужен именно x32 из за совместимости со строй средой. Печаль. Среда платная, но в фирме, в которой я работаю, не захотят покупать что либо в дополнение к уже купленной одной версии C++Borland XE2. Добавлено через 5 минут Я безусловно подключаю либу используя #include и все файлы на месте, поскольку я указал их месторасположение. Весь вопрос в том, а можно ли целую стороннюю либу запихнуть в собственноручно сделанную либу и забыть про ее подключение в основной проект. В котором меня интересуют только две функции (из методов этого класса)
не понятен тогда смысл создавать свои либы, если нельзя реализовать нечто подобное (использовать одну - две функции сторонней либы, не подключая стороннюю либу в проект). (Я не программист)
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|||||||||||||||||||||
06.08.2015, 18:37 | 14 | ||||||||||||||||||||
Сообщение было отмечено MitrandirSergey как решение
Решение
Можно, но для этого в интерфейсе нужно отвязаться от типов, которые предлагает эта стороняя либа, заменив их переносимыми и совместимыми с С обертками.
Для экспорта из библиотеки использовать С-функции. Если нужны сложные объекты с состоянием (т.е. объекты классов), то в интерфейсе их описывать не нужно, вместо этого нужно возвращать "дескрипторы" (да хоть бы void*) таких объектов. Т.е. нужно будет выполнить сокрытие типов реализации за С-совместимым интерфейсом. Покажу на простом примере, например есть класс А, с состоянием state. Нам нужно реализовать (по каким-то не зависящим от нас причинам) этот класс в Visual Studio, но использовать его надо в Builder XE.
В h-файле, который будет подключаться в другую среду, опишем такой код:
Реализация у него такая:
1
|
9 / 9 / 0
Регистрация: 26.01.2015
Сообщений: 94
|
|
06.08.2015, 20:06 | 15 |
0
|
Avazart
|
06.08.2015, 20:21
#16
|
0
|
DrOffset
|
06.08.2015, 20:45
#17
|
Не по теме: Если коротко, то обозначает, что функция не меняет состояние класса. Const в функциях-членах класса Могут ли быть указаны квалификаторы типа в качестве возвращаемого значения функции/метода? Можно еще поискать по форуму. Тем таких полно было. Повторяться нет смысла.
0
|
0 / 0 / 0
Регистрация: 04.07.2013
Сообщений: 17
|
|
07.08.2015, 14:18 [ТС] | 18 |
Большое спасибо!
0
|
9 / 9 / 0
Регистрация: 26.01.2015
Сообщений: 94
|
|
07.08.2015, 19:12 | 19 |
Avazart, DrOffset, Да я просто больше по шарпу, а для чего при объявлении чисто вирт. функции пишут то void func()=0; то void func() const =0;?если не сложно, а то я как-то гуглил да не выгуглил.
0
|
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 32
|
|
07.08.2015, 19:25 | 20 |
MitrandirSergey,
Советую использовать библиотеку Intel MKL: она сразу обновляется при появлении новых процессоров: например, у меня два шестиядерных процессора - один haswell, а второй - поддерживает только команды SSE (вплоть до самых последних). Первый перемножает две матрицы 10000*10000 за 7 с., а второй - более чем за 29 сек. Частоты обоих процессоров одинаковы (3.33 GHz).
0
|
07.08.2015, 19:25 | |
07.08.2015, 19:25 | |
Помогаю со студенческими работами здесь
20
Windows I/o без Kernel32.dll и Advapi32.dll Архивация без использование внешних Dll C# без зависимостей Сборка qt без зависимостей Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |