<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Security-Policy" content="script-src 'self'; img-src * cid: data:;">
</head>
<body contenteditable="false">
<div id="ssc3612"><style>#ssc3612 .EmailQuote{margin-left: 1pt;padding-left: 4pt;border-left: rgb(128, 0, 0) 2px solid;}</style>
<div><font size="2"><span style="font-size:11pt">
<div class="PlainText">Hi all,<br>
<br>
I am a new guy to GDAL. I encountered a simple problem when trying to <br>
link against the GDAL library.<br>
<br>
<br>
I am working with Version 2.3.2 and Ubuntu 16.04 LTS 64bit. I downloaded <br>
the source code, did a configure with no arguments and compiled the <br>
library. After compiling, I performed an install operation to install <br>
GDAL to /usr/local.<br>
<br>
<br>
When I tried to link my code against /usr/local/lib/<wbr><a href="http://libgdal.so">libgdal.so</a><wbr> I got the<br>
following error:<br>
<br>
undefined reference to `GDALRasterBand::RasterIO(GDALRWFlag, int, int, <br>
int, int, void*, int, int, GDALDataType, int, int)'<br>
<br>
<br>
I was using cmake and did a successful find_package(GDAL) with <br>
environment variable GDAL_DIR set to /usr/local. Then I specified the <br>
dependencies with target_link_libraries( ) and the cmake variable <br>
${GDAL_LIBRARY}.<br>
<br>
<br>
By using<br>
<br>
<br>
nm -gC /usr/local/lib/<wbr><a href="http://libgdal.so">libgdal.so</a><wbr> | grep GDALRasterBand::RasterIO<br>
<br>
<br>
I got the following output:<br>
<br>
<br>
00000000009c3360 T GDALRasterBand::RasterIOResampled(GDALRWFlag, int, <br>
int, int, int, void*, int, int, GDALDataType, long long, long long, <br>
GDALRasterIOExtraArg*)<br>
00000000009aaaf0 T GDALRasterBand::RasterIO(GDALRWFlag, int, int, int, <br>
int, void*, int, int, GDALDataType, long long, long long, <br>
GDALRasterIOExtraArg*)<br>
<br>
It turns out that the member function GDALRasterBand::RaterIO( ) is <br>
compiled into <wbr><a href="http://libgdal.so">libgdal.so</a><wbr> with an extra argument with the type of<br>
GDALRasterIOExtraArg*. However, in the file <br>
/usr/local/include/gdal_priv.h, the definition of class GDALRasterBand <br>
shows that the declaration of RasterIO( ) looks like this<br>
<br>
CPLErr RasterIO( GDALRWFlag, int, int, int, int, void *, int, int, <br>
GDALDataType, int, int);<br>
<br>
<br>
Note that the last argument, which is present in the <wbr><a href="http://libgdal.so">libgdal.so</a><wbr><br>
implementation, is missing.<br>
<br>
<br>
Why there is this inconsistency between the header file gdal_priv.h and <br>
the library file <wbr><a href="http://libgdal.so">libgdal.so</a><wbr>.<br>
<br>
<br>
Thanks.<br>
<br>
<br>
Yaoyu<br>
<br>
<br>
</div>
</span></font></div>
</div>
</body>
</html>