Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Some functions seem missing in DLL version of library. #643

Open
SkybuckFlying opened this issue Aug 19, 2022 · 7 comments
Open

Some functions seem missing in DLL version of library. #643

SkybuckFlying opened this issue Aug 19, 2022 · 7 comments

Comments

@SkybuckFlying
Copy link
Contributor

SkybuckFlying commented Aug 19, 2022

For example:

_h3ToFaceIjk

Seems to be missing.

I would advise to keep all C implementation code strictly seperated into *.C files and not inside headers !

Headers should only contain prototypes, no source code !

Here is a listing of for example a debug dll build of this library:

Turbo Dump Version 6.5.4.0 Copyright (c) 1988-2016 Embarcadero Technologies, Inc.
Display of File h3.dll

Old Executable Header

DOS File Size 2F000h (192512. )
Load Image Size 450h ( 1104. )
Relocation Table entry count 0000h ( 0. )
Relocation Table address 0040h ( 64. )
Size of header record (in paragraphs) 0004h ( 4. )
Minimum Memory Requirement (in paragraphs) 0000h ( 0. )
Maximum Memory Requirement (in paragraphs) FFFFh ( 65535. )
File load checksum 0000h ( 0. )
Overlay Number 0000h ( 0. )

Initial Stack Segment (SS:SP) 0000:00B8
Program Entry Point (CS:IP) 0000:0000

Portable Executable (PE) File

Header base: 00000100

CPU type AMD64
Flags 2022 [ executable linenumbers symbols largeaddr backwards library ]
DLL flags 0160 [ DynamicBase NXCompat ]
Linker Version E.1D
Time stamp 62E650BF : Sun Jul 31 11:51:59 2022
O/S Version 6.0
User Version 0.0
Subsystem Version 6.0
Subsystem 0003 [ Windows character ]
Object count 00000008
Symbols offset 00000000
Symbols count 00000000
Optional header size 00F0
Magic # 20B
Code size 0001BA00
Init Data size 00013A00
Uninit Data size 00000000
Entry RVA 0000100F
Image base 0000000180000000
Code base 00001000
Object/File align 00001000/00000200
Reserved 00000000
Image size 00034000
Header size 00000400
Checksum 00000000
Stack reserve/commit 0000000000100000/0000000000001000
Heap reserve/commit 0000000000100000/0000000000001000
Number interesting RVAs 00000010
Name RVA Size


Exports 0002B4E0 00000A75
Imports 00030400 00000050
Resources 00032000 0000043C
Exceptions 0002E000 00000EC4
Security 00000000 00000000
Fixups 00033000 000002C8
Debug 000292C8 00000038
Description 00000000 00000000
Global Ptr 00000000 00000000
TLS 00000000 00000000
Callbacks 00029300 00000138
Bound Imports 00000000 00000000
Import Addr Table 00030000 00000400
Delayed Imports 00000000 00000000
COM Runtime 00000000 00000000
reserved 00000000 00000000

Object table:

Name VirtSize RVA PhysSize Phys off Flags


01 .text 0001B9C1 00001000 0001BA00 00000400 60000020 [CER]
02 .rdata 0000EF55 0001D000 0000F000 0001BE00 40000040 [IR]
03 .data 00001809 0002C000 00001200 0002AE00 C0000040 [IRW]
04 .pdata 00001164 0002E000 00001200 0002C000 40000040 [IR]
05 .idata 00000F82 00030000 00001000 0002D200 40000040 [IR]
06 .00cfg 00000151 00031000 00000200 0002E200 40000040 [IR]
07 .rsrc 0000043C 00032000 00000600 0002E400 40000040 [IR]
08 .reloc 00000566 00033000 00000600 0002EA00 42000040 [DIR]

Key to section flags:
C - contains code
D - discardable
E - executable
I - contains initialized data
R - readable
W - writeable


Section: Import
File Offset: 0002D200 (184832)
ImportLookUpTblRVA:000305A8
Time Stamp: 00000000
Forwarder Chain: 00000000 (index of first forwarder reference)

Imports from VCRUNTIME140D.dll
(hint = 002F) __vcrt_GetModuleHandleW
(hint = 002E) __vcrt_GetModuleFileNameW
(hint = 001C) __current_exception_context
(hint = 001B) __current_exception
(hint = 0025) __std_type_info_destroy_list
(hint = 0009) __C_specific_handler_noexcept
(hint = 0008) __C_specific_handler
(hint = 003C) memcpy
(hint = 0031) __vcrt_LoadLibraryExW
(hint = 003E) memset

Imports from ucrtbased.dll
(hint = 0528) strcat_s
(hint = 0068) __stdio_common_vsprintf_s
(hint = 0175) _initterm_e
(hint = 00B6) _configure_narrow_argv
(hint = 0171) _initialize_narrow_environment
(hint = 0172) _initialize_onexit_table
(hint = 02B5) _register_onexit_function
(hint = 00E5) _execute_onexit_table
(hint = 00C2) _crt_atexit
(hint = 00C1) _crt_at_quick_exit
(hint = 00A4) _cexit
(hint = 054B) terminate
(hint = 039C) _wmakepath_s
(hint = 03B8) _wsplitpath_s
(hint = 0564) wcscpy_s
(hint = 052C) strcpy_s
(hint = 0174) _initterm
(hint = 0005) _CrtDbgReportW
(hint = 0004) _CrtDbgReport
(hint = 03D8) acos
(hint = 04F8) pow
(hint = 047A) fmod
(hint = 0547) tan
(hint = 03E5) atan2
(hint = 03E4) atan
(hint = 03DF) asin
(hint = 0512) round
(hint = 0342) _wassert
(hint = 0520) sin
(hint = 042D) cos
(hint = 0524) sqrt
(hint = 00C9) _dclass
(hint = 0069) __stdio_common_vsscanf
(hint = 0066) __stdio_common_vsprintf
(hint = 0477) fmin
(hint = 0416) ceil
(hint = 04D7) lroundl
(hint = 0459) fabs
(hint = 03D7) abs
(hint = 04D8) malloc
(hint = 0484) free
(hint = 03FD) calloc
(hint = 02C2) _seh_filter_dll

Imports from KERNEL32.dll
(hint = 02DA) GetStartupInfoW
(hint = 0468) RaiseException
(hint = 03F6) MultiByteToWideChar
(hint = 0611) WideCharToMultiByte
(hint = 04D5) RtlCaptureContext
(hint = 04DC) RtlLookupFunctionEntry
(hint = 04E3) RtlVirtualUnwind
(hint = 05C0) UnhandledExceptionFilter
(hint = 057F) SetUnhandledExceptionFilter
(hint = 0220) GetCurrentProcess
(hint = 02B8) GetProcAddress
(hint = 01B4) FreeLibrary
(hint = 05E1) VirtualQuery
(hint = 02BE) GetProcessHeap
(hint = 0355) HeapFree
(hint = 0351) HeapAlloc
(hint = 026A) GetLastError
(hint = 0281) GetModuleHandleW
(hint = 0385) IsDebuggerPresent
(hint = 036F) InitializeSListHead
(hint = 0125) DisableThreadLibraryCalls
(hint = 02F3) GetSystemTimeAsFileTime
(hint = 0225) GetCurrentThreadId
(hint = 0221) GetCurrentProcessId
(hint = 0452) QueryPerformanceCounter
(hint = 038C) IsProcessorFeaturePresent
(hint = 059E) TerminateProcess


Section: Exports
File Offset: 0001BE00 (114176)
Flags: 00000000
Time Stamp: FFFFFFFF : Thu Jan 1 00:59:59 1970
Major Version: 0000
Minor Version: 0000

Exports from h3.dll
74 exported name(s), 74 export addresse(s). Ordinal base is 1.
Sorted by Name:
RVA Ord. Hint Name
-------- ---- ---- ----
00001091 1 0000 _zeroIndexDigits
0000115E 2 0001 areNeighborCells
00001375 3 0002 cellAreaKm2
000015DC 4 0003 cellAreaM2
000014E2 5 0004 cellAreaRads2
00001519 6 0005 cellToBoundary
00001500 7 0006 cellToCenterChild
000011EA 8 0007 cellToChildren
0000105F 9 0008 cellToChildrenSize
00001587 10 0009 cellToLatLng
00001203 11 000A cellToLocalIj
00001573 12 000B cellToParent
00001307 13 000C cellToVertex
000010D2 14 000D cellToVertexes
00001465 15 000E cellsToDirectedEdge
00001438 16 000F cellsToLinkedMultiPolygon
0000100A 17 0010 compactCells
000015BE 18 0011 degsToRads
000014B5 19 0012 destroyLinkedMultiPolygon
000012B7 20 0013 directedEdgeToBoundary
00001258 21 0014 directedEdgeToCells
00001032 22 0015 exactEdgeLengthKm
00001014 23 0016 exactEdgeLengthM
000010D7 24 0017 exactEdgeLengthRads
0000103C 25 0018 getBaseCellNumber
0000120D 26 0019 getDirectedEdgeDestination
000011EF 27 001A getDirectedEdgeOrigin
00001370 28 001B getHexagonAreaAvgKm2
000012AD 29 001C getHexagonAreaAvgM2
00001217 30 001D getHexagonEdgeLengthAvgKm
000010E6 31 001E getHexagonEdgeLengthAvgM
000015B9 32 001F getIcosahedronFaces
00001280 33 0020 getNumCells
000014BF 34 0021 getPentagons
00001343 35 0022 getRes0Cells
000015AA 36 0023 getResolution
0000113B 37 0024 greatCircleDistanceKm
000012A8 38 0025 greatCircleDistanceM
0000117C 39 0026 greatCircleDistanceRads
0000159B 40 0027 gridDisk
00001122 41 0028 gridDiskDistances
0000141F 42 0029 gridDiskDistancesSafe
000011F4 43 002A gridDiskDistancesUnsafe
00001334 44 002B gridDiskUnsafe
0000153C 45 002C gridDisksUnsafe
000012E4 46 002D gridDistance
0000149C 47 002E gridPathCells
000011E0 48 002F gridPathCellsSize
0000121C 49 0030 gridRingUnsafe
00001505 50 0031 h3ToString
00001140 51 0032 isPentagon
00001262 52 0033 isResClassIII
0000106E 53 0034 isValidCell
00001582 54 0035 isValidDirectedEdge
0000155F 55 0036 isValidVertex
0000129E 56 0037 iterInitBaseCellNum
000013BB 57 0038 iterInitParent
00001532 58 0039 iterInitRes
000013C0 59 003A iterStepChild
0000123A 60 003B iterStepRes
000013CA 61 003C latLngToCell
000010AA 62 003D localIjToCell
0000139D 63 003E maxFaceCount
0000105A 64 003F maxGridDiskSize
000014D3 65 0040 maxPolygonToCellsSize
00001546 66 0041 originToDirectedEdges
0000111D 67 0042 pentagonCount
00001514 68 0043 polygonToCells
00001104 69 0044 radsToDegs
00001389 70 0045 res0CellCount
000012E9 71 0046 stringToH3
000014FB 72 0047 uncompactCells
00001433 73 0048 uncompactCellsSize
0000126C 74 0049 vertexToLatLng


Section: Resources
File Offset: 0002E400 (189440)
Flags: 00000000
Time Stamp: 00000000
Major Version: 0000
Minor Version: 0000

Resources:
Type Name Lang Id

[0 named entries, 1 ID entries]
type: Manifest (24) (next directory @00000018)

          [0 named entries, 1 ID entries]
          type: Bitmap (2)  (next directory @00000030)

                                 [0 named entries, 1 ID entries]
                                 type: Unknown (1033)  (data @00000048)
                                     Offset:    00032170
                                     Size:      0000017D
                                     Code Page: 00000000
                                     Reserved:  00000000
@sahrk
Copy link

sahrk commented Aug 19, 2022 via email

@isaacbrodsky
Copy link
Collaborator

I think this is a Windows specific issue where only explicitly exported functions (see h3api.h.in line 44) will be visible outside the DLL. Could you try configuring the project with CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS set to ON (cmake -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON) before building and try again?

@SkybuckFlying
Copy link
Contributor Author

SkybuckFlying commented Aug 20, 2022

I think this is a Windows specific issue where only explicitly exported functions (see h3api.h.in line 44) will be visible outside the DLL. Could you try configuring the project with CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS set to ON (cmake -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON) before building and try again?

I will try this in a moment, but first I will post my own temporarely/experimental fix which I tried/did before reading your comment, my temporarely/experimental fix is as follows:

My experimental fix was to basically modify the file: h3api.h.in

which seems to be used to generate file: h3api.h

The modification adds the missing export for:

_h3ToFaceIjk

and it also adds the missing structures that are referenced by this api/function call:

CoordIJK
FaceIJK

However doing so would lead to a re-declaration error or warning so these were copied & pasted and then renamed to:

CoordIJKv2
FaceIJKv2

For the exporting of this routine it doesn't matter what the name of the structure as as long as it uses the same kind of structures and sizes, so that's why I thought it would work and it did work.

Later CHET was used to convert the C headers into Delphi headers, for this to work the structures have to use the original names to avoid some kind of error, to get CHET working I "nuked" the original structures by disabling them in their own header files and kept the structures in the h3api.h file as to prevent a re-declaration error, since CHET seems to use some CLang libary and this CLang library would detect it otherwise and also error on it, so this fixed it.

Then I tested the loading in Delphi, I did notice the function api appeared twice in the output/api/h3api.pas file and I simply removed one of them, and it worked, the function seems to perform quite nicely !

I think CHET actually sees all the exported functions somehow... but the actual C build does not somehow...

Personally I think the export directive is simply missing, maybe it was intentional because maybe the original author wanted to rename this function first ? Or maybe he/she thought it might not be important ? Or it could simply be looked over because it was in between other internal functions. I believe this last hypothesis might explain why this function is missing, however other functions are also missing... so maybe this is not it.

The function is present in the file h3Index.h at the bottom of the file in between other internal functions:

// Internal functions

int _h3ToFaceIjkWithInitializedFijk(H3Index h, FaceIJK *fijk);
H3Error _h3ToFaceIjk(H3Index h, FaceIJK *fijk);
H3Index _faceIjkToH3(const FaceIJK *fijk, int res);
Direction _h3LeadingNonZeroDigit(H3Index h);
H3Index _h3RotatePent60ccw(H3Index h);
H3Index _h3RotatePent60cw(H3Index h);
H3Index _h3Rotate60ccw(H3Index h);
H3Index _h3Rotate60cw(H3Index h);
DECLSPEC H3Index _zeroIndexDigits(H3Index h, int start, int end);

So this is what led to my hypothesis that it may have been missed, because it was in between these internal functions ?

However this does not explain why other functions from other files are missing, so maybe there are export directives elsewhere for these functions, so I will try your suggestion and see if that fixes it.

So far the commands I used to build with CMake were:

Step 1. use CMakeGUI to configure and generate a build folder (not sure if this step is required).

Step 2: Configure for DLL release:
E:\SourceCode\h3>cmake ..\h3 -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON

Step 3: Build DLL release:
E:\SourceCode\h3>cmake --build . --config Release

I will try and integrate your suggestion into these commands, not sure at which step to integrate, step 2 seems most likely to me:

cmake ..\h3 -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON

I will report back later.

For now here is my own custom/temporarely/experimental fix that I used to produce a working release DLL with this particular function/api exported:


// dummy structures added at top of file:
/** @struct CoordIJK
 * @brief IJK hexagon coordinates
 *
 * Each axis is spaced 120 degrees apart.
 */
typedef struct {
    int i;  ///< i component
    int j;  ///< j component
    int k;  ///< k component
} CoordIJKv2;

/** @struct FaceIJK
 * @brief Face number and ijk coordinates on that face-centered coordinate
 * system
 */
typedef struct {
    int face;        ///< face number
    CoordIJKv2 coord;  ///< ijk coordinates on that face
} FaceIJKv2;


// api modified to use/reference dummy structures:

/** @defgroup _h3ToFaceIjk _h3ToFaceIjk
 * Functions for _h3ToFaceIjk
 * @{
 */
/** @brief Convert an H3Index to a FaceIJK address */
DECLSPEC H3Error H3_EXPORT(_h3ToFaceIjk)(H3Index h, FaceIJKv2 *fijk);
/** @} */

@SkybuckFlying
Copy link
Contributor Author

SkybuckFlying commented Aug 20, 2022

Reporting back on your suggestion:

(Not sure if the missing doxygen has anything to do with it, see output below)

So far it's building executables and such, I will report back once it's done and I know more ! ;)

E:\SourceCode\h3>cmake ..\h3 -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON
-- Selecting Windows SDK version 10.0.19041.0 to target Windows 6.1.7601.
CMake Warning at CMakeLists.txt:334 (message):
  clang-format was not detected, so automatic source code reformatting is
  disabled


CMake Warning at CMakeLists.txt:346 (message):
  clang-tidy was not detected, so source code linting is disabled


-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
-- Configuring done
-- Generating done
-- Build files have been written to: E:/SourceCode/h3

E:\SourceCode\h3>cmake --build . --config Release
Microsoft (R) Build Engine version 16.11.2+f32259642 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

  Auto build dll exports
     Creating library E:/SourceCode/h3/bin/Release/h3.lib and object E:/SourceCode/h3/bin/Release/h3.exp
  h3.vcxproj -> E:\SourceCode\h3\bin\Release\h3.dll
  benchmarkCellsToLinkedMultiPolygon.vcxproj -> E:\SourceCode\h3\bin\Release\benchmarkCellsToLinkedMultiPolygon.exe
  benchmarkDirectedEdge.vcxproj -> E:\SourceCode\h3\bin\Release\benchmarkDirectedEdge.exe
  benchmarkGridDiskCells.vcxproj -> E:\SourceCode\h3\bin\Release\benchmarkGridDiskCells.exe
  benchmarkGridPathCells.vcxproj -> E:\SourceCode\h3\bin\Release\benchmarkGridPathCells.exe

@SkybuckFlying
Copy link
Contributor Author

SkybuckFlying commented Aug 20, 2022

Your suggested command WORKED ! =D:

cmake ..\h3 -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON

I LOVE YOU RIGHT NOW, IT HAS APPERENTLY/ACCORDING TO TDUMP, EXPORTED ALL FUNCTIONS ! YEAH ! =D

Here is the output of TDUMP from Delphi:

Turbo Dump  Version 6.5.4.0 Copyright (c) 1988-2016 Embarcadero Technologies, Inc.
                      Display of File h3.dll

Old Executable Header

DOS File Size                                      16200h  ( 90624. )
Load Image Size                                      450h  (  1104. )
Relocation Table entry count                          0000h  (     0. )
Relocation Table address                              0040h  (    64. )
Size of header record      (in paragraphs)            0004h  (     4. )
Minimum Memory Requirement (in paragraphs)            0000h  (     0. )
Maximum Memory Requirement (in paragraphs)            FFFFh  ( 65535. )
File load checksum                                    0000h  (     0. )
Overlay Number                                        0000h  (     0. )

Initial Stack Segment  (SS:SP)			  0000:00B8
Program Entry Point    (CS:IP)			  0000:0000


Portable Executable (PE) File

Header base: 000000F8

CPU type                 AMD64
Flags                    2022 [ executable linenumbers symbols largeaddr backwards library ]
DLL flags                0160 [ DynamicBase NXCompat ]
Linker Version           E.1D
Time stamp               63012603 : Sat Aug 20 20:20:51 2022
O/S Version              6.0
User Version             0.0
Subsystem Version        6.0
Subsystem                0003 [ Windows character ]
Object count             00000006
Symbols offset           00000000
Symbols count            00000000
Optional header size     00F0
Magic #                  20B
Code size                0000BC00
Init Data size           0000A800
Uninit Data size         00000000
Entry RVA                0000C2B4
Image base               0000000180000000
Code base                00001000
Object/File align        00001000/00000200
Reserved                 00000000
Image size               0001A000
Header size              00000400
Checksum                 00000000
Stack reserve/commit     0000000000100000/0000000000001000
Heap reserve/commit      0000000000100000/0000000000001000
Number interesting RVAs  00000010
Name                   RVA       Size  
------------------  --------  --------
Exports             000142B0  00001468
Imports             00015718  0000008C
Resources           00018000  000001E0
Exceptions          00017000  00000DD4
Security            00000000  00000000
Fixups              00019000  00000030
Debug               00012A60  0000001C
Description         00000000  00000000
Global Ptr          00000000  00000000
TLS                 00000000  00000000
Callbacks           00012A80  00000138
Bound Imports       00000000  00000000
Import Addr Table   0000D000  000001A8
Delayed Imports     00000000  00000000
COM Runtime         00000000  00000000
reserved            00000000  00000000

Object table:
#   Name              VirtSize    RVA     PhysSize  Phys off  Flags   
--  --------          --------  --------  --------  --------  --------
01  .text             0000BBF8  00001000  0000BC00  00000400  60000020 [CER]
02  .rdata            00008D0E  0000D000  00008E00  0000C000  40000040 [IR]
03  .data             00000650  00016000  00000200  00014E00  C0000040 [IRW]
04  .pdata            00000DD4  00017000  00000E00  00015000  40000040 [IR]
05  .rsrc             000001E0  00018000  00000200  00015E00  40000040 [IR]
06  .reloc            00000030  00019000  00000200  00016000  42000040 [DIR]

Key to section flags:
  C - contains code
  D - discardable
  E - executable
  I - contains initialized data
  R - readable
  W - writeable

******************************************************************************
Section:             Import
File Offset:         0000C000 (49152)
  ImportLookUpTblRVA:00015828
  Time Stamp:        00000000
  Forwarder Chain:   00000000 (index of first forwarder reference)

Imports from VCRUNTIME140.dll
    (hint = 0025) __std_type_info_destroy_list
    (hint = 0008) __C_specific_handler
    (hint = 003C) memcpy
    (hint = 003E) memset

Imports from api-ms-win-crt-heap-l1-1-0.dll
    (hint = 0019) malloc
    (hint = 0017) calloc
    (hint = 0018) free

Imports from api-ms-win-crt-math-l1-1-0.dll
    (hint = 007C) ceil
    (hint = 0118) tan
    (hint = 00EC) lroundl
    (hint = 004A) acos
    (hint = 00FE) pow
    (hint = 0116) sqrt
    (hint = 0090) cos
    (hint = 0112) sin
    (hint = 0109) round
    (hint = 004F) asin
    (hint = 00C6) fmin
    (hint = 00C9) fmod
    (hint = 0010) _dclass
    (hint = 0054) atan
    (hint = 0055) atan2

Imports from api-ms-win-crt-stdio-l1-1-0.dll
    (hint = 0010) __stdio_common_vsscanf
    (hint = 000D) __stdio_common_vsprintf

Imports from api-ms-win-crt-runtime-l1-1-0.dll
    (hint = 0016) _cexit
    (hint = 0022) _execute_onexit_table
    (hint = 0034) _initialize_onexit_table
    (hint = 0033) _initialize_narrow_environment
    (hint = 003F) _seh_filter_dll
    (hint = 0037) _initterm_e
    (hint = 0036) _initterm
    (hint = 0018) _configure_narrow_argv

Imports from KERNEL32.dll
    (hint = 02F3) GetSystemTimeAsFileTime
    (hint = 04DC) RtlLookupFunctionEntry
    (hint = 04E3) RtlVirtualUnwind
    (hint = 05C0) UnhandledExceptionFilter
    (hint = 057F) SetUnhandledExceptionFilter
    (hint = 0220) GetCurrentProcess
    (hint = 0385) IsDebuggerPresent
    (hint = 036F) InitializeSListHead
    (hint = 0125) DisableThreadLibraryCalls
    (hint = 04D5) RtlCaptureContext
    (hint = 0225) GetCurrentThreadId
    (hint = 0221) GetCurrentProcessId
    (hint = 0452) QueryPerformanceCounter
    (hint = 038C) IsProcessorFeaturePresent
    (hint = 059E) TerminateProcess

******************************************************************************
Section:             Exports
File Offset:         0000C000 (49152)
  Flags:             00000000
  Time Stamp:        FFFFFFFF : Thu Jan  1 00:59:59 1970
  Major Version:     0000
  Minor Version:     0000

Exports from h3.dll
  196 exported name(s), 196 export addresse(s).  Ordinal base is 1.
  Sorted by Name:
    RVA      Ord. Hint Name
    -------- ---- ---- ----
    00016050    1 0000 __isa_available_default
    00004410    2 0001 __local_stdio_printf_options
    00004420    3 0002 __local_stdio_scanf_options
    0000A440    4 0003 _adjustOverageClassII
    0000A610    5 0004 _adjustPentVertOverage
    0000BA10    6 0005 _baseCellIsCwOffset
    0000BA30    7 0006 _baseCellToCCWrot60
    0000BB00    8 0007 _baseCellToFaceIjk
    00002B70    9 0008 _downAp3
    00002C10   10 0009 _downAp3r
    00002CB0   11 000A _downAp7
    00002D60   12 000B _downAp7r
    0000A750   13 000C _faceIjkPentToCellBoundary
    0000ACD0   14 000D _faceIjkPentToVerts
    0000BB20   15 000E _faceIjkToBaseCell
    0000BB50   16 000F _faceIjkToBaseCellCCWrot60
    0000AE20   17 0010 _faceIjkToCellBoundary
    0000B3B0   18 0011 _faceIjkToGeo
    00004430   19 0012 _faceIjkToH3
    0000B410   20 0013 _faceIjkToVerts
    000086E0   21 0014 _geoAzDistanceRads
    000089D0   22 0015 _geoAzimuthRads
    0000B580   23 0016 _geoToClosestFace
    0000B620   24 0017 _geoToFaceIjk
    0000B670   25 0018 _geoToHex2d
    00006160   26 0019 _geoToVec3d
    0000BB80   27 001A _getBaseCellDirection
    0000BBC0   28 001B _getBaseCellNeighbor
    00001000   29 001C _getEdgeHexagons
    000011E0   30 001D _gridDiskDistancesInternal
    00004710   31 001E _h3LeadingNonZeroDigit
    00004750   32 001F _h3Rotate60ccw
    000047D0   33 0020 _h3Rotate60cw
    00004850   34 0021 _h3RotatePent60ccw
    00004930   35 0022 _h3RotatePent60cw
    00004A10   36 0023 _h3ToFaceIjk
    00004C00   37 0024 _h3ToFaceIjkWithInitializedFijk
    00009EF0   38 0025 _hashVertex
    00002E10   39 0026 _hex2dToCoordIJK
    0000B860   40 0027 _hex2dToGeo
    00003630   41 0028 _hexRadiusKm
    00002FC0   42 0029 _ijkAdd
    00002FE0   43 002A _ijkMatches
    00003000   44 002B _ijkNormalize
    00003080   45 002C _ijkRotate60ccw
    00003120   46 002D _ijkRotate60cw
    000031C0   47 002E _ijkScale
    000031E0   48 002F _ijkSub
    00003200   49 0030 _ijkToHex2d
    00009F50   50 0031 _initVertexNode
    00009B70   51 0032 _ipow
    0000BBE0   52 0033 _isBaseCellPentagon
    0000BC00   53 0034 _isBaseCellPolarPentagon
    00003240   54 0035 _neighbor
    000061D0   55 0036 _pointSquareDist
    00008A90   56 0037 _posAngleRads
    00003280   57 0038 _rotate60ccw
    000032E0   58 0039 _rotate60cw
    00008AC0   59 003A _setGeoRads
    00003340   60 003B _setIJK
    00006210   61 003C _square
    00003350   62 003D _unitIjkToDigit
    000033F0   63 003E _upAp7
    00003470   64 003F _upAp7r
    00006070   65 0040 _v2dEquals
    00006090   66 0041 _v2dIntersect
    00006130   67 0042 _v2dMag
    00001590   68 0043 _vertexGraphToLinkedGeo
    00004CB0   69 0044 _zeroIndexDigits
    00006BB0   70 0045 addLinkedCoord
    00006C20   71 0046 addLinkedLoop
    00006C40   72 0047 addNewLinkedLoop
    00006C80   73 0048 addNewLinkedPolygon
    00009F70   74 0049 addVertexNode
    00009650   75 004A areNeighborCells
    00003690   76 004B bboxCenter
    000036F0   77 004C bboxContains
    00003740   78 004D bboxEquals
    000039F0   79 004E bboxFromGeoLoop
    00006CB0   80 004F bboxFromLinkedGeoLoop
    00003780   81 0050 bboxHexEstimate
    000038F0   82 0051 bboxIsTransmeridian
    00003B90   83 0052 bboxesFromGeoPolygon
    00008AD0   84 0053 cellAreaKm2
    00008B00   85 0054 cellAreaM2
    00008B40   86 0055 cellAreaRads2
    00004CF0   87 0056 cellToBoundary
    00004D80   88 0057 cellToCenterChild
    00004E00   89 0058 cellToChildren
    00004E70   90 0059 cellToChildrenSize
    00004F00   91 005A cellToLatLng
    00007A50   92 005B cellToLocalIj
    00007AC0   93 005C cellToLocalIjk
    00004F60   94 005D cellToParent
    00006220   95 005E cellToVertex
    00006480   96 005F cellToVertexes
    00009810   97 0060 cellsToDirectedEdge
    00001640   98 0061 cellsToLinkedMultiPolygon
    00004FF0   99 0062 compactCells
    00008EE0  100 0063 constrainLat
    00008F10  101 0064 constrainLng
    00007040  102 0065 countLinkedCoords
    00007040  103 0066 countLinkedLoops
    00007060  104 0067 countLinkedPolygons
    000034F0  105 0068 cubeToIjk
    00008F60  106 0069 degsToRads
    00007080  107 006A destroyLinkedGeoLoop
    000070B0  108 006B destroyLinkedMultiPolygon
    0000A080  109 006C destroyVertexGraph
    00009870  110 006D directedEdgeToBoundary
    00009960  111 006E directedEdgeToCells
    00001830  112 006F directionForNeighbor
    00006730  113 0070 directionForVertexNum
    00008F70  114 0071 exactEdgeLengthKm
    00008FA0  115 0072 exactEdgeLengthM
    00008FD0  116 0073 exactEdgeLengthRads
    0000A180  117 0074 findNodeForEdge
    0000A250  118 0075 findNodeForVertex
    0000A2F0  119 0076 firstVertexNode
    000091A0  120 0077 geoAlmostEqual
    000091E0  121 0078 geoAlmostEqualThreshold
    000056B0  122 0079 getBaseCellNumber
    000099D0  123 007A getDirectedEdgeDestination
    00009A30  124 007B getDirectedEdgeOrigin
    00009220  125 007C getHexagonAreaAvgKm2
    00009240  126 007D getHexagonAreaAvgM2
    00009260  127 007E getHexagonEdgeLengthAvgKm
    00009280  128 007F getHexagonEdgeLengthAvgM
    000056C0  129 0080 getIcosahedronFaces
    000092A0  130 0081 getNumCells
    000058D0  131 0082 getPentagons
    0000BC10  132 0083 getRes0Cells
    00005990  133 0084 getResolution
    000092E0  134 0085 greatCircleDistanceKm
    00009300  135 0086 greatCircleDistanceM
    00009320  136 0087 greatCircleDistanceRads
    00001B00  137 0088 gridDisk
    00001B10  138 0089 gridDiskDistances
    00001C20  139 008A gridDiskDistancesSafe
    00001C60  140 008B gridDiskDistancesUnsafe
    00001DB0  141 008C gridDiskUnsafe
    00001DC0  142 008D gridDisksUnsafe
    00007E40  143 008E gridDistance
    00007EC0  144 008F gridPathCells
    000081F0  145 0090 gridPathCellsSize
    00001E60  146 0091 gridRingUnsafe
    00001FC0  147 0092 h3NeighborRotations
    000022D0  148 0093 h3SetToVertexGraph
    000059A0  149 0094 h3ToString
    00003510  150 0095 ijToIjk
    00003530  151 0096 ijkDistance
    000035F0  152 0097 ijkToCube
    00003610  153 0098 ijkToIj
    0000A310  154 0099 initVertexGraph
    00003DD0  155 009A isClockwiseGeoLoop
    00007150  156 009B isClockwiseLinkedGeoLoop
    000059D0  157 009C isPentagon
    00005A30  158 009D isResClassIII
    00005A40  159 009E isResolutionClassIII
    00005A60  160 009F isValidCell
    00009A70  161 00A0 isValidDirectedEdge
    00006810  162 00A1 isValidVertex
    00009BA0  163 00A2 iterInitBaseCellNum
    00009C10  164 00A3 iterInitParent
    00009CD0  165 00A4 iterInitRes
    00009D50  166 00A5 iterStepChild
    00009E40  167 00A6 iterStepRes
    00005B80  168 00A7 latLngToCell
    00003900  169 00A8 lineHexEstimate
    00008270  170 00A9 localIjToCell
    000082E0  171 00AA localIjkToCell
    00005C10  172 00AB makeDirectChild
    00005C60  173 00AC maxFaceCount
    00002430  174 00AD maxGridDiskSize
    00002460  175 00AE maxPolygonToCellsSize
    000072D0  176 00AF normalizeMultiPolygon
    00009AF0  177 00B0 originToDirectedEdges
    00005CE0  178 00B1 pentagonCount
    00003FB0  179 00B2 pointInsideGeoLoop
    00007870  180 00B3 pointInsideLinkedGeoLoop
    000041B0  181 00B4 pointInsidePolygon
    00002640  182 00B5 polygonToCells
    00009410  183 00B6 radsToDegs
    0000A360  184 00B7 removeVertexNode
    0000BD30  185 00B8 res0CellCount
    00009420  186 00B9 setGeoDegs
    00005CF0  187 00BA setH3Index
    00005D50  188 00BB sprintf
    00005DB0  189 00BC sscanf
    00005E10  190 00BD stringToH3
    00009440  191 00BE triangleArea
    00009560  192 00BF triangleEdgeLengthsToArea
    00005E60  193 00C0 uncompactCells
    00005F50  194 00C1 uncompactCellsSize
    00006890  195 00C2 vertexNumForDirection
    00006AE0  196 00C3 vertexToLatLng

******************************************************************************
Section:             Resources
File Offset:         00015E00 (89600)
  Flags:             00000000
  Time Stamp:        00000000
  Major Version:     0000
  Minor Version:     0000

Resources:
Type          Name                   Lang Id
--------------------------------------------
[0 named entries, 1 ID entries]
type: Manifest (24)  (next directory @00000018)

              [0 named entries, 1 ID entries]
              type: Bitmap (2)  (next directory @00000030)

                                     [0 named entries, 1 ID entries]
                                     type: Unknown (1033)  (data @00000048)
                                         Offset:    00018060
                                         Size:      0000017D
                                         Code Page: 00000000
                                         Reserved:  00000000

@SkybuckFlying
Copy link
Contributor Author

So far I have been using these two commands:

Step 2: Configure for DLL release:
cmake ..\h3V4 -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON

Step 3:
cmake --build . --config Release

But something isn't quite right... it dumps the builds/outputs into the main folder... though it would be nice if the output would go to
\h3V4-build\

But I am not sure how to modify the above commands ?

So basically there are two folders:

The git clone into
h3v4

and the intended output/builder folder:
h3v4-build

Any ideas how to modify the above commands so that it can output to h3v4-build ?

I am also not sure if I should then issue the CMake commands in the original folder: h3v4 or in h3v4-build ? Or maybe it does not matter ???

@isaacbrodsky
Copy link
Collaborator

If you have already built the library from the main folder you may need to clean your git state (git clean -x -f -d ., which will delete all uncommitted changes from the repo!) to get CMake to do what you want. Otherwise I think CMake will pick up the original build files from the main folder.

Alternately try adding --build . to the Step 2 command you list above?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants