SnosMe/uiohook-napi

Issue building binary for darwin

BhuvanRohith opened this issue · 6 comments

This is the gyp file i modified for darwin -

{
    'targets': [{
            'target_name': 'uiohook_napi',
            'dependencies': ['libuiohook'],
            'sources': [
                'src/lib/addon.c',
                'src/lib/napi_helpers.c',
                'src/lib/uiohook_worker.c',
            ],
            'include_dirs': [
                'libuiohook/include',
                'src/lib',
            ]
        },
        {
            'target_name': 'libuiohook',
            'type': 'static_library',
            'sources': [
                'libuiohook/src/logger.c',
            ],
            'include_dirs': [
                'libuiohook/include',
                'libuiohook/src',
            ],
            "conditions": [
                ['OS=="darwin"', {
                    "defines": [
                        "__MACOSX_CORE__"
                    ],
                    "link_settings": {
                        "libraries": [
                            "-framework IOKit",
                            "-framework Carbon",
                            "-framework CoreFoundation"
                        ],
                    },
                    'sources': [
                        "libuiohook/src/darwin/input_helper.c",
                        "libuiohook/src/darwin/input_hook.c",
                        "libuiohook/src/darwin/post_event.c",
                        "libuiohook/src/darwin/system_properties.c"
                    ],
                    'include_dirs': [
                        'libuiohook/src/darwin'
                    ]
                }],
                ['OS=="win"', {
                    'sources': [
                        'libuiohook/src/windows/input_helper.c',
                        'libuiohook/src/windows/input_hook.c',
                        'libuiohook/src/windows/post_event.c',
                        'libuiohook/src/windows/system_properties.c'
                    ],
                    'include_dirs': [
                        'libuiohook/src/windows'
                    ]
                }],
                ['OS=="linux"', {
                    'defines': [
                        'USE_XRANDR', 'USE_EVDEV', 'USE_XT'
                    ],
                    'link_settings': {
                        'libraries': [
                            '-lX11', '-lXrandr', '-lXtst', '-lpthread', '-lXt'
                        ],
                    },
                    'cflags': ['-std=c99', '-pedantic', '-Wall', '-pthread'],
                    'sources': [
                        'libuiohook/src/x11/input_helper.c',
                        'libuiohook/src/x11/input_hook.c',
                        'libuiohook/src/x11/post_event.c',
                        'libuiohook/src/x11/system_properties.c'
                    ],
                    'include_dirs': [
                        'libuiohook/src/x11'
                    ]
                }]
            ]
        }
    ]
}

Its getting compiled fine. But, when i import it and run , it throws the following error -

_### **_dyld: lazy symbol binding failed: Symbol not found: _hook_set_dispatch_proc
  Referenced from: /Users/mahadityakaushik/crewscaleagent/electron-dist/electron-darwin-x64-napi.node
  Expected in: flat namespace

dyld: Symbol not found: _hook_set_dispatch_proc
  Referenced from: /Users/mahadityakaushik/crewscaleagent/electron-dist/electron-darwin-x64-napi.node
  Expected in: flat namespace_**_

I am not able to figure out, which library linking am i missing here. Btw it works very well with linux. Kudos

I don't own Mac device, that's the reason why it's not prebuilt. Open to pick up by commuinity

Any idea when does that kind of error arise in c ?

Try to remove libuiohook target and merge its build steps into uiohook_napi

@BhuvanRohith did you found any solution ?

Hey guys, anyone facing the similar issue on MAC , please try using this Binding.gyp. Adding the required defines in os=Mac definition resolved my issue, was able to build a Mac binary

{
  'targets': [
    {
      'target_name': 'uiohook_napi',
      'dependencies': ['uiohook'],
      "win_delay_load_hook" : "true",
      'sources': [
        'src/lib/include/uiohook.h',
        'src/lib/addon.c',
        'src/lib/napi_helpers.c',
        'src/lib/napi_helpers.h',
        'src/lib/uiohook_worker.c',
      ],
      'include_dirs': [
        'libuiohook/include',
        'src/lib',
        "<!@(node -p \"require('node-addon-api').include\")"
      ],
      	"configurations": {
			"Release": {
				"msvs_settings": {
					"VCCLCompilerTool": {
						'ExceptionHandling': 1
					}
				}
			}
		}
    },
    {
      'target_name': 'uiohook',
      'type': 'static_library',
      'sources': [
        'libuiohook/src/logger.c',
      ],
      'include_dirs': [
        'libuiohook/include',
        'libuiohook/src',
      ],
      "conditions": [
           ['OS=="mac"', {
             "defines":[
               "__MACOSX_CORE__","USE_IOKIT","USE_COREFOUNDATION","USE_CARBON","USE_CARBON_LEGACY","USE_OBJC"
               ],
              "link_settings": {
                  "libraries": [
                  "-framework IOKit", 
                  "-framework Carbon",
                  "-framework CoreFoundation"
                    ],   
                  },
              'sources': [
                            "libuiohook/src/darwin/input_helper.c",
                            "libuiohook/src/darwin/input_hook.c",
                            "libuiohook/src/darwin/post_event.c",
                            "libuiohook/src/darwin/system_properties.c"
                             ],
              'include_dirs': [
                          'libuiohook/src/darwin',
                          "<!@(node -p \"require('node-addon-api').include\")"
                          ]
        }],
        ['OS=="win"', {
      	  'sources': [
            'libuiohook/src/windows/input_helper.c',
            'libuiohook/src/windows/input_hook.c',
            'libuiohook/src/windows/post_event.c',
            'libuiohook/src/windows/system_properties.c'
          ],
          'include_dirs': [
            'libuiohook/src/windows',
            "<!@(node -p \"require('node-addon-api').include\")"
          ]
      	}],
        ['OS=="linux"', {
          'defines': [
            'USE_XRANDR', 'USE_EVDEV', 'USE_XT'
          ],
          'link_settings': {
            'libraries': [
              '-lX11', '-lXrandr', '-lXtst', '-lpthread', '-lXt'
            ],
          },
          'cflags': ['-std=c99', '-pedantic', '-Wall', '-pthread'],
      	  'sources': [
            'libuiohook/src/x11/input_helper.c',
            'libuiohook/src/x11/input_hook.c',
            'libuiohook/src/x11/post_event.c',
            'libuiohook/src/x11/system_properties.c'
          ],
          'include_dirs': [
            'libuiohook/src/x11',
            "<!@(node -p \"require('node-addon-api').include\")"
          ]
      	}]
      ]
    }
  ]
}

Great ill test it today and let you know thank you very much for the quick response. really appreciate it . stucked for few days now. ill test and update you.