После компиляции не могу найти arx-файл

Автор Тема: После компиляции не могу найти arx-файл  (Прочитано 7453 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн MarikАвтор темы

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
Установил VS2012 Update4...при компиляции не формируется файл .arx. То есть выходной каталог заполняется файлами в том числе и .log, в котором написано "Построение успешно завершено" (что подтверждает правильность путей), но самого файла .arx нет! Где копать?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Выложи сюда в архиве (zip) весь проект (удали только временные файлы, файл с расширением sdf и каталоги Debug, Release,x86,Win32,Ipch)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
если компиляция прошла успешно, то место расположения arx можно узнать так:


если в той строке стоит что-то типа ($Release)/lalala.arx, значит arx находится в папке Release текущей конфигурации

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Николай Горлов
Ну тогда нужно добавить, что arx-файл получится если не компилировать, а построить (Build) проект.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Ну тогда нужно добавить, что arx-файл получится если не компилировать, а построить (Build) проект.
))) подловили. в принципе согласен, но на практике - это одно и то же (да и врядли получится собрать проект без его компиляции или скомпилировать без получения результирующего бинарника - lib, dll, exe, ...). Да и если честно, само слово "Build" воспринимается мной как "сборка".
Ну и цитата из MSDN:
When you have fully developed and sufficiently debugged a project or solution, you can compile its components in a Release build.

PS: О, пока не забыл, еще дополнение по теме. сам ARX файл может иметь расширение DLL. В принципе это маловероятно, учитывая мусорные props файлы, которые к проекту цепляет arx wizard, но проверить стоит:

короче говоря, это тоже лучше ручками прописывать для каждой конфигурации (по крайней мере я props файлы выгрызаю из проектов сразу после создания нового проекта)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
да и врядли получится собрать проект без его компиляции или скомпилировать без получения результирующего бинарника - lib, dll, exe, ...
Собрать без компиляции не получится, а вот скомпилировать и получить *.obj можно запросто. И тогда и *.arx (или *.dll/*.dbx) можно искать долго и упорно. Но это вопрос не о знании ObjectARX, а об умении пользоваться Visual Studio и понимании процесса создания *.exe/*.dll/*.arx/*.dbx/*.crx при помощи VC++.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн MarikАвтор темы

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
Вот собрал в архив. *.obj есть, но что с ним делать? В общем-то все действия мои по книге Полещука Н.Н. В VS2015 результатом был файл .arx, который не воспринимался автокадом. Теперь делаю все тоже самое в VS2012 - файла *arx нет.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Ну если выполнить Build Solution в твоём проекте, то будет ошибка:
Цитировать
App02.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __cdecl AcGePoint3d::AcGePoint3d(void)" (__imp_??0AcGePoint3d@@QEAA@XZ)
E:\RAN\ARX2015\App02\\x64\Release\App02.arx : fatal error LNK1120: 1 unresolved externals
Так что нужно указать для Linker еще и acge20.lib:



Цитировать
И тогда всё собирается:
------ Build started: Project: App02, Configuration: Release x64 ------
Build started 26.05.2016 16:04:55.
InitializeBuildStatus:
  Touching "x64\Release\App02.unsuccessfulbuild".
ClCompile:
  All outputs are up-to-date.
Link:
  Generating code
  Finished generating code
  App02.vcxproj -> E:\RAN\ARX2015\App02\\x64\Release\App02.arx
FinalizeBuildStatus:
  Deleting file "x64\Release\App02.unsuccessfulbuild".
  Touching "x64\Release\App02.lastbuildstate".

Build succeeded.

Time Elapsed 00:00:00.97
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

Синим отмечен путь к полученному arx-файлу.
« Последнее редактирование: 26-05-2016, 16:55:51 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот собрал в архив. *.obj есть, но что с ним делать?
*.obj - это результаты компиляции. Они промежуточный результат. Следующий этап (упрощенно) линковка, которая и должна создать arx-файл. Чтобы запустить весь процесс выбирай из меню Build Solution (в русской версии это кажется "Построить решение"). 
Николай Горлов
Скажешь что я был неправ? :D
« Последнее редактирование: 26-05-2016, 17:00:29 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн MarikАвтор темы

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
О'кей, файл сгенерирован! НО...автокад (2016 и 2015) его не может прочитать. "Не удается загрузить файл...". Код - это пример из поставки ObjectArx2015. Можете запустить его на своем акаде?

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Скажешь что я был неправ?  :D
двоякое чувство... хорошо... если на пальцах и не вдаваясь в подробности, то принцип работы по созданию готового бинарника такой:
1. при помощи cl.exe весь код компилируется в obj-файлы
2. из obj-файлов линкер link.exe собирает уже требуемый бинарник.
Глобально всем этим хозяйством в MSVS управляет MSBuild.exe, который по очереди сам запускает нужные экзешники и выводит отчет об их работе в окна "Output" и "Error List". И всё это нажатием одной единственной кнопки - (Project->Build). Причем ошибки могут быть как на этапе компиляции, так и на этапе сборки. Все они попадают в эти окна. Отследить какая именно ошибка можно через окно Output. В каком разделе отобразилась, тот и выявил ошибку (это я про ClCompile:... и Link:...)
Когда-то давным давно у MSVS было отдельное меню Project->Compile, которое занималось проверкой кода на вшивость. Теперь это всё делается в режиме online во время написания кода (это конечно не компиляция, а простая проверка синтаксиса, но для проверки на вшивость все-равно хватает). Так вот, о чем это я... как запустить из современной студии отдельно компилятор (не создавая дополнительных кнопочек и не пользуясь командной строкой) я, если честно, себе не представляю.

И так, вернемся к MSBuild, который последовательно компилирует и собирает наш проект и ВЫВОДИТ ОШИБКИ в окна "Error List" и "Output", если что-то пошло не так!!!
Естественно, если окно "Error List" не открыто, а в окне "Output" что-то написано, но кто ж его читает, то да, признаю, можно при помощи IDE студии только скомпилировать но не собрать проект в arx файл. Но по факту - это не компиляция без линковки а ошибка создания бинарника, которая лечится, если читать сообщения, которые так усердно пытается выдать нам MSBuild, а не пытаться найти файл, которого по указанному пути и быть не должно из-за ошибок во время компиляции/сборки.

О'кей, файл сгенерирован! НО...автокад (2016 и 2015) его не может прочитать. "Не удается загрузить файл...". Код - это пример из поставки ObjectArx2015. Можете запустить его на своем акаде?
разрядность автокада и arx одинаковая? или автокад 32bit, а arx - 64bit?

Оффлайн MarikАвтор темы

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
Николай Горлов,  Угу. Разрядность одинаковая - 64bit

Отмечено как Решение Александр Ривилис 27-05-2016, 00:45:49

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
О'кей, файл сгенерирован! НО...автокад (2016 и 2015) его не может прочитать. "Не удается загрузить файл...". Код - это пример из поставки ObjectArx2015. Можете запустить его на своем акаде?
Ох. Если бы ты воспользовался ObjectARX Wizard, то я бы не потратил кучу времени на поиск почему у тебя не грузится в AutoCAD arx-файл.
Добавь в конец App02.cpp такие строки:
Код - C++ [Выбрать]
  1. #if !defined(_WIN64) && !defined (_AC64)
  2.   #pragma comment(linker, "/export:_acrxGetApiVersion,PRIVATE")
  3.   #pragma comment(linker, "/export:acrxEntryPoint,PRIVATE")
  4. #else
  5.   #pragma comment(linker, "/export:acrxGetApiVersion,PRIVATE")
  6.   #pragma comment(linker, "/export:acrxEntryPoint,PRIVATE")
  7. #endif

И снова перестрой решение.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение