开放设计联盟-ODA平台

ODA平台(以前称为Teigha)是启用GDAL支持以读取AutoCAD DWG和Microstation DGN v8文件所必需的。GDAL/OGR必须在ODA支持下构建,以便启用这些驱动程序。

官方发展援助所需产品

ODA平台包含多个SDK。Drawings SDK通过面向对象的API提供对.dwg和.dgn中所有数据的访问。需要编译GDAL。由于所有产品都需要内核SDK,因此必须下载以下两个产品:

  • 内核

  • 图画

这些类库是不公开的。你必须成为会员才能进入类库。认证后,可从以下位置获取库: ODA Member Downloads

去类库

要选择要下载的适当文件,请考虑以下ODA名称约定(对于Linux):

  • lnx-Linux操作系统

  • X86、X64—表示X86或X64平台

  • 4.4、4.7、4.8、4.9、5.2、5.3、6.3、7.2、8.3-GCC版本

  • dll—表示共享库版本

  • pic编译与位置无关的代码选项

ODA归档文件还包含一个发行后缀,以区分发行版本,如21.2或21.6。

要下载Linux所需的文件,可以下载以下文件:

  • Kernel_lnxX64_7.2dll_21.6.tar.gz

  • Drawings_lnxX64_7.2dll_21.6.tar.gz

在此示例中,文件名为:

  • lnx 对于Linux

  • X64 对于X64体系结构

  • 7.2 对于gcc 7.2

  • dll 对于共享库版本

  • 21.6 ODA 2021发布,版本6

汇编类库

在编译之前必须合并这些库。

cd ~/dev/cpp/ODA21.6
mkdir base_7.2
tar xvzf Kernel_lnxX64_7.2dll_21.6.tar.gz -C base_7.2
tar xvzf Drawings_lnxX64_7.2dll_21.6.tar.gz -C base_7.2

要编译,需要一个激活密钥。可向ODA产品激活部申请。激活密钥必须复制到 ThirdParty/activation/ .

cp OdActivationInfo base_7.2/ThirdParty/activation/

使用以下工具编译ODA库:

cd base_7.2
./configure
make -j8

确保您的gcc主要版本与ODA libs gcc版本匹配。例如,在Ubuntu上,可以安装不同的gcc/g++版本,如7、8和9。在它们之间切换:

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

ODA库路径

编译ODA后,得到的lib位于非标准搜索路径中。根本没有 make install 包括将库复制到标准位置。这可能是个问题。

使用ODA编译和运行GDAL/OGR有不同的可选选项:

  • 将ODA库复制到标准位置

  • 设置LDu LIBRARYu路径(如 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/jgr/dev/cpp/ODA21.6/base_7.2/bin/lnxX64_7.2dll

  • 将ODA文件夹添加到系统库路径 (echo "/home/jgr/dev/cpp/ODA21.6/base_7.2/bin/lnxX64_7.2dll" | sudo tee -a /etc/ld.so.conf.d/z_gdal-ODA.conf

  • 设置运行时路径 (rpath )编译GDAL时(如 LDFLAGS="-Wl,-rpath=/home/jgr/dev/cpp/ODA21.6/base_7.2/bin/lnxX64_7.2dll"

ODA库名称

一些ODA库名称不符合通常的Linux标准 lib*.so . 如果你不使用 rpath ,对于上面列出的其他备选方案,您可能必须从实际名称创建符号链接。例子:

cd ~/dev/cpp/ODA21.6/base_7.2/bin/lnxX64_7.2dll
for f in *.tx
do
   echo "Processing $f"
   ln -s $f lib$f.so
done
sudo ldconfig

核对 ldconfig -v 如果所有ODA库现在都可见。

编译GDAL

编译ODA库后,可以使用两个附加选项构建GDAL:

  • --with-teigha=/home/jgr/dev/cpp/ODA21.6/base_7.2

  • --with-teigha-plt=lnxX64_7.2dll

价值 --with-teigha 是合并和编译库的文件夹的完整路径。

价值 --with-teigha-plt 必须与ODA使用的平台名称匹配。平台名称是下的文件夹名称 Platforms

ls -l Platforms/
lnxX64_7.2dll

GDAL编译

使用您自己的GDAL构建配置并添加前面提到的选项。运行后 configure ,确保 Teigha (DWG and DGNv8) 已配置支持。

例如,编译GDAL可以是:

cd gdal
./autogen.sh
./configure --without-libtool LDFLAGS="-L/usr/lib/x86_64-linux-gnu" --with-python=python3 --with-proj=/usr/local --with-pg=yes --with-poppler --with-teigha=/home/jgr/dev/cpp/ODA21.6/base_7.2 --with-teigha-plt=lnxX64_7.2dll
make -j8
sudo make install
sudo ldconfig
# Python support
cd swig/python
python3 setup.py build
sudo python3 setup.py install

我们补充说 LDFLAGS="-L/usr/lib/x86_64-linux-gnu" 在ODA上使用系统库 libpcrelibcurl 等。

测试

在编译GDAL之后,您可以检查新的驱动程序 DGNV8DWG 支持:

./apps/ogrinfo --formats | grep 'AutoCAD\|Microstation'
DGN -vector- (rw+v): Microstation DGN
DWG -vector- (ro): AutoCAD DWG
DGNV8 -vector- (rw+): Microstation DGNv8
DXF -vector- (rw+v): AutoCAD DXF
CAD -raster,vector- (rovs): AutoCAD Driver

如果文件是DGNv8,则在打开文件时将看到该驱动程序正在运行:

ogrinfo ~/dev/cpp/gdal/autotest/ogr/data/dgnv8/test_dgnv8.dgn
INFO: Open of `/home/jgr/dev/cpp/gdal/autotest/ogr/data/dgnv8/test_dgnv8.dgn'
      using driver `DGNV8' successful.
1: my_model

故障排除

如果发现链接错误,可以设置 LD_LIBRARY_PATHLDFLAGS 环境变量,以确保您能够从它们的位置获取ODA库。

使用 ldconfig -v 检查ODA的库文件夹是否列出。

例如,您可以尝试:

export LD_LIBRARY_PATH=/home/jgr/dev/cpp/ODA21.6/base_7.2/bin/lnxX64_7.2dll
./configure --without-libtool LDFLAGS="-L/usr/lib/x86_64-linux-gnu" --with-python=python3 --with-proj=/usr/local --with-pg=yes --with-poppler --with-teigha=/home/jgr/dev/cpp/ODA21.6/base_7.2 --with-teigha-plt=lnxX64_7.2dll

您可以强制运行时位置(使用 rpath )使用:

./configure --without-libtool LDFLAGS="-L/usr/lib/x86_64-linux-gnu -Wl,-rpath=/home/jgr/dev/cpp/ODA21.6/base_7.2/bin/lnxX64_7.2dll" --with-python=python3 --with-proj=/usr/local --with-pg=yes --with-poppler --with-teigha=/home/jgr/dev/cpp/ODA21.6/base_7.2 --with-teigha-plt=lnxX64_7.2dll

根据生成环境调整这些设置。

也见