Static linking both LexActivator and LexFloatClient

This post says it cannot be done:

Is there a technical reason why it cannot be made possible? We would like to statically link both to avoid having to protect against unscrupulous users trying to substitute their own DLLs for the Cryptlex ones. If we must use a DLL, do you have a recommended security practice for checking that the LexActivator or LexFloatClient DLL is genuine?

Hi Gary,

This limitation no more exists. You can link both the libs together. But on Windows, currently, we don’t ship static-libs, so you can use it on Linux and macOS only.

To check the integrity of the dll, you can store the md5 hash of dll in your app, and verify it from your app.

Do you plan to ship a static LexFloatClient for Windows any time in the future? We build our apps for both platforms and we don’t like having differences between the two, so at the moment you’re forcing us to link LexFloatClient dynamically on both.

I have created a ticket for the same. But it may take a month or two.

Okay. That sounds great. Thank you.

We would like to have a static LexFloatClient-lib for Windows too!

+1 from me too, with a bonus feature request at Combined lexActivator & lexFloatClient libs :slight_smile:

Is there any progress on this? Any idea of when a static library for Windows will be made available? We would like to see it by the end of this year.

Yes, this is in progress. This will be available around mid-December or earlier.

The static version of LexFloatClient for Windows is now available for download.

We have a problem. Both LexActivator and LexFloatClient have a static variable TimerHandle, so we get duplicate symbol errors when trying to link both LexActivator and LexFloatClient to our own static lib on Windows.

2>RLMflex_s.lib(LexThread.obj) : error LNK2005: “class std::map<class std::basic_string<char,struct std::char_traits,class std::allocator >,void *,struct std::less<class std::basic_string<char,struct std::char_traits,class std::allocator > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits,class std::allocator > const ,void *> > > TimerHandle” (?TimerHandle@@3V?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAXU?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAX@std@@@2@@std@@A) already defined in RLMflex_s.lib(LexFloatClientThread.obj)

Hi Gary,

We are looking into the issue. Will get back to you.

Hi Gary,

The issue has been fixed in the latest version now.