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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь 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 видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DimVer

  • ADN OPEN
  • Сообщений: 32
  • Карма: 2
Добрый день, похожая ошибка, вроде бы подключил все необходимые либы, но все равно релиз не собирается.

Код - C++ [Выбрать]
  1. #include "rxregsvc.h"
  2. #include "acutads.h"
  3. #include "tchar.h"
  4.  
  5. #include "aced.h"
  6.  
  7. static void vdiTestCommand() {
  8.     acutPrintf(_T("Тестовая команда выполнена\n"));
  9. }
  10.  
  11. // Simple acrxEntryPoint code. Normally intialization and cleanup
  12. // (such as registering and removing commands) should be done here.
  13. //
  14. extern "C" AcRx::AppRetCode
  15. acrxEntryPoint(AcRx::AppMsgCode msg, void* appId)
  16. {
  17.     switch (msg) {
  18.     case AcRx::kInitAppMsg:
  19.  
  20.         acedRegCmds->addCommand(_T("VDI_TEST_COMMANDS"),
  21.             _T("VDI_TEST"), _T("VDI_TEST"), ACRX_CMD_TRANSPARENT,
  22.             vdiTestCommand);
  23.  
  24.  
  25.         // Allow application to be unloaded
  26.         // Without this statement, AutoCAD will
  27.         // not allow the application to be unloaded
  28.         // except on AutoCAD exit.
  29.         //
  30.         acrxUnlockApplication(appId);
  31.         // Register application as MDI aware.
  32.         // Without this statement, AutoCAD will
  33.         // switch to SDI mode when loading the
  34.         // application.
  35.         //
  36.         acrxRegisterAppMDIAware(appId);
  37.         acutPrintf(_T("Приложение загружено\n"));
  38.         break;
  39.     case AcRx::kUnloadAppMsg:
  40.         acedRegCmds->removeGroup(_T("VDI_TEST_COMMANDS"));
  41.         acutPrintf(_T("Приложение выгружено\n"));
  42.         break;
  43.     }
  44.     return AcRx::kRetOK;
  45. }
  46.  

Ошибка:

Цитировать
Build started at 21:50...
1>------ Build started: Project: TestApp002, Configuration: Release x64 ------
1>TestApp002.cpp
1>   Creating library C:\Work\Apps\ObjectARX\Apps\TestApp002\x64\Release\TestApp002.lib and object C:\Work\Apps\ObjectARX\Apps\TestApp002\x64\Release\TestApp002.exp
1>TestApp002.obj : error LNK2001: unresolved external symbol "public: static class AcRxClass * __cdecl AcEdCommandStack::desc(void)" (?desc@AcEdCommandStack@@SAPEAVAcRxClass@@XZ)
1>TestApp002.obj : error LNK2001: unresolved external symbol acrxSysRegistry
1>TestApp002.obj : error LNK2001: unresolved external symbol "public: static class AcRxResourceInstance const & __cdecl AcRxResourceInstance::empty(void)" (?empty@AcRxResourceInstance@@SAAEBV1@XZ)
1>TestApp002.obj : error LNK2001: unresolved external symbol "public: static bool __cdecl AcRxClass::isDerivedFrom(class AcRxClass const *,class AcRxClass const *)" (?isDerivedFrom@AcRxClass@@SA_NPEBV1@0@Z)
1>C:\Work\Apps\ObjectARX\Apps\TestApp002\x64\Release\TestApp002.arx : fatal error LNK1120: 4 unresolved externals
1>Done building project "TestApp002.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Build completed at 21:50 and took 02,247 seconds ==========

В чем может быть проблема?
« Последнее редактирование: 29-05-2024, 22:24:05 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
вроде бы подключил все необходимые либы
Неа. Не подключил. И это хорошо видно по протоколу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение