开放设计联盟-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上使用系统库 libpcre , libcurl 等。
测试
在编译GDAL之后,您可以检查新的驱动程序 DGNV8 和 DWG 支持:
./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_PATH 或 LDFLAGS 环境变量,以确保您能够从它们的位置获取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
根据生成环境调整这些设置。