Thanks, Floh.
I didn't compile it into a library, so visibility attribute seems not take
effect.
As we can see from emscripth.h
#define EMSCRIPTEN_KEEPALIVE __attribute__((used)) __attribute__
((visibility ("default"))) actually, this macro affects the function with
definition, but not for declaration only from my trials.
Floh <[email protected]> 于2019年5月3日周五 上午1:12写道:
> PS: I've been looking around a bit, and maybe this is the better solution
> (via __attribute__(...)):
>
> __attribute__((visibility("default"))) void foo(void);
>
> This should be the clang equivalent to __declspec(dllimport) in the Visual
> Studio compiler, see here:
>
> https://webassembly.org/docs/dynamic-linking/
>
> On Thursday, 2 May 2019 17:06:27 UTC+2, Duan Bing wrote:
>>
>> Thanks, your new idea works for me. the motivation of doing this is
>> that I will call this imported function while I will insert some wasm code
>> to the original wasm file later, similar to this project had done
>> https://github.com/ewasm/wasm-metering , but by a different PL. so I
>> don't want the original wasm developer to use this function(I will insert
>> foo dynamically with a mangling name ), and I also occupy the import index
>> space by doing this in advance.
>>
>> Floh <[email protected]> 于2019年5月2日周四 下午10:56写道:
>>
>>> Ah ok, I misunderstood your question, apologies. I don't know how one
>>> would add a function declaration to the WASM imports table like this.
>>> EMSCRIPTEN_KEEPALIVE and the "-s EXPORTED_FUNCTIONS" linker option would
>>> work for the "other side" (some WASM module exporting functions to the
>>> outside).
>>>
>>> Complete guess, but maybe you need some "dummy code" that's guaranteed
>>> to stay in the importing WASM module, even though this is never called? So
>>> that the linker would recognize the function as an "import".
>>>
>>> Something like this:
>>>
>>> extern "C" void foo();
>>> // dummy_imports() is never called, but will not be removed because of
>>> EMSCRIPTEN_KEEPALIVE
>>> EMSCRIPTEN_KEEPALIVE void dummy_imports(void) {
>>> foo();
>>> }
>>>
>>> But as I said, this is complete guess.
>>>
>>> On Thursday, 2 May 2019 16:22:28 UTC+2, Duan Bing wrote:
>>>>
>>>> Thanks, Floh. it works when the function is defined.
>>>> Actually, my function is an external function declaration, like
>>>> extern "C" void foo();
>>>>
>>>> It doesn't work even I declare like this:
>>>> extern "C" void EMSCRIPTEN_KEEPALIVE foo().
>>>>
>>>> Do you have any idea for this situation?
>>>>
>>>> Floh <[email protected]> 于2019年5月2日周四 下午10:13写道:
>>>>
>>>>> Have a look at EMSCRIPTEN_KEEPALIVE:
>>>>> https://emscripten.org/docs/api_reference/emscripten.h.html#c.EMSCRIPTEN_KEEPALIVE,
>>>>> this prevents a C/C++ function from being removed even when it isn't
>>>>> referenced by other C/C++ code (normally this is used to call C functions
>>>>> from the JS side).
>>>>>
>>>>> On Thursday, 2 May 2019 08:16:43 UTC+2, Duan Bing wrote:
>>>>>>
>>>>>> I declare an external function in C source file, but never used by
>>>>>> the code, then compile it to wasm by EMCC. there is no doubt the
>>>>>> external
>>>>>> function will be eliminated by the compiler.
>>>>>>
>>>>>> Is there any approach to keep this external function and then be
>>>>>> compiled to an import function in wasm?
>>>>>>
>>>>>> The motivation to remain the external function is that I want to
>>>>>> insert some wasm code in the wasm file after it's generated.
>>>>>>
>>>>>> Thanks all!
>>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "emscripten-discuss" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to [email protected].
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "emscripten-discuss" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "emscripten-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.