Ошибка сегментации с использованием libdxf

Я пытаюсь использовать библиотеку libdxf. Я создал небольшую программу, в которой я получаю ошибку сегментации. Я отладил свой код, используя gdb, и нашел строку кода, вызывающую сброс ядра.

Мой фрагмент кода написан ниже:

#include<iostream>
#include<../src/dl_dxf.h>
#include<../src/dl_creationadapter.h>
using namespace std;

class Test:public DL_CreationAdapter {
public:
  void write();
};

void Test::write(){
    DL_Dxf *dxf = new DL_Dxf();  // fault here
    DL_Codes::version exportVersion = DL_Codes::AC1015;
    DL_WriterA* dw = dxf->out("myfile.dxf", exportVersion);
    if (dw==NULL) {
        printf("Cannot open file 'myfile.dxf' \
                for writing.");
   }
   delete dxf;
}

int main(){
  Test test;
  test.write();  // fault here
  return 0;
}

Источник ошибки сегментации указан двумя строками выше с комментарием //fault here.

Как справиться с этой ошибкой сегментации?


person Kamalpreet Grewal    schedule 23.08.2015    source источник
comment
Вы справитесь с этим, исправив ошибку. Извините, но ваш вопрос совершенно бесполезен, потому что код, вызывающий ошибку, не включен. Ваш код вызова не имеет значения (и даже не является минимальным, как того требует руководство). Тем не менее, какую версию этой библиотеки вы используете и каков ее URL-адрес? Вы должны упомянуть их, потому что это не библиотека, подобная Boost или Qt, которые известны большинству программистов на C++.   -  person Ulrich Eckhardt    schedule 23.08.2015


Ответы (1)


Я хочу, чтобы вы работали на Linux.

Я скомпилировал ваш код и успешно запустил его, просто заменив

 #include<../src/dl_dxf.h>
 #include<../src/dl_creationadapter.h>

с

#include<dxflib/dl_dxf.h>
#include<dxflib/dl_creationadapter.h>

Я установил пакет libdxflib-dev через диспетчер пакетов в Ubuntu (а также libdxflib-2.5.0.0, который включает libdxflib.so).

Он создал пустой «myfile.dxf» и вышел.

Поскольку вы включаете заголовки dxf из другого каталога, я подозреваю, что существует проблема совместимости (возможно, между заголовками dxf и общим объектным файлом).

Если вы являетесь пользователем Ubuntu, строки ниже для компиляции программы с использованием стандартных пакетов могут быть полезны для понимания основной причины.

 sudo apt-get install libdxflib-dev libdxflib-2.5.0.0

заменить включения на

#include<dxflib/dl_dxf.h>
#include<dxflib/dl_creationadapter.h>

затем скомпилируйте с помощью команды

 g++ -Wall dxf.cpp -ldxflib -L/usr/lib/x86_64-linux-gnu/

и запустить

Обратите внимание, что /usr/lib/x86_64-linux-gnu/ — это место, где стоит libdxflib.so. В вашем окружении может быть иначе.

person ataman    schedule 23.08.2015