🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.c
15 messages
15 total messages Started by Borneq Sat, 15 Oct 2016 10:21
Linker C nie widzi procedury assemblerowej
#308905
Author: Borneq
Date: Sat, 15 Oct 2016 10:21
13 lines
1393 bytes
Mam projekt, w nim dwa pliki assemlerowe kompilowane przez Yasm,a 
właściwie przez
vsyasm.exe -Xvc -f x64 -o "x64\Debug\\" -rnasm -pnasm  addmul_1.asm
Pliki się kompilują ale linker C nie widzi tych funkcji :

unresolved external symbol mpn_mul_1 referenced in function mpn_mul_basecase
unresolved external symbol mpn_addmul_1 referenced in function 
mpn_mul_basecase

nie poamga zmiana nazwy plików assemblerowych na nazwę funkcji.
Plik main to cpp ale moożna zmienić na c.
Projekt jest w
https://drive.google.com/open?id=0B7E799YMGCWTcms0QTlyZkNvaUE
Linker C nie widzi procedury assemblerowej
#308906
Author: M.M.
Date: Sat, 15 Oct 2016 18:45
1 lines
1276 bytes
Upewnij sie ze to C a nie C++
Linker C nie widzi procedury assemblerowej
#308907
Author: M.M.
Date: Sat, 15 Oct 2016 18:45
1 lines
1352 bytes
Upewnij sie ze to C a nie C++
Linker C nie widzi procedury assemblerowej
#308908
Author: M.M.
Date: Sat, 15 Oct 2016 18:45
1 lines
1269 bytes
Upewnij sie ze to C a nie C++
Re: Linker C nie widzi procedury assemblerowej
#308909
Author: slawek
Date: Sun, 16 Oct 2016 06:27
1 lines
973 bytes
Ale pamiętasz że jak ma być fun() w C to musi być _fun w Asemblerze?
Re: Linker C nie widzi procedury assemblerowej
#308910
Author: Borneq
Date: Sun, 16 Oct 2016 10:49
6 lines
1297 bytes
W dniu 16.10.2016 o 08:27, slawek pisze:
> Ale pamiętasz że jak ma być fun() w C to musi być _fun w Asemblerze?
Nic to nie dało, linker żąda akurat bez podkreślenia. Nie wiem, czy 
nazwa funkcji musi być w assemblerze w linii "LEAF_PROC mpn_addmul_1"
czy też trzeba aby cały plik assemblerowy nazywał się tak jak żądana 
funkcja.
Re: Linker C nie widzi procedury assemblerowej
#308911
Author: Marek Borowski
Date: Sun, 16 Oct 2016 12:48
34 lines
1729 bytes
On 16.10.2016 12:49, Borneq wrote:
> W dniu 16.10.2016 o 08:27, slawek pisze:
>> Ale pamiętasz że jak ma być fun() w C to musi być _fun w Asemblerze?
> Nic to nie dało, linker żąda akurat bez podkreślenia. Nie wiem, czy
> nazwa funkcji musi być w assemblerze w linii "LEAF_PROC mpn_addmul_1"
> czy też trzeba aby cały plik assemblerowy nazywał się tak jak żądana
> funkcja.
>
A może warto sprawdzic co to LEAF_PROC ?


%macro LEAF_PROC 1

     global  __g%1

%ifdef DLL
     export  __g%1
%endif

__g%1:


Jak widac dodaje prefix __g wiec nie dziwne ze linker nie znajduje 
symbolu. Albo uzywaj __gmpn_addmul_1 w c albo zrezygnuj z LEAF_PROC.


	global mpn_addmul_1

mpn_addmul_1:


Pozdrawiam

Marek
Re: Linker C nie widzi procedury assemblerowej
#308912
Author: Borneq
Date: Sun, 16 Oct 2016 13:42
5 lines
1285 bytes
W dniu 16.10.2016 o 14:48, Marek Borowski pisze:
> Jak widac dodaje prefix __g wiec nie dziwne ze linker nie znajduje
> symbolu. Albo uzywaj __gmpn_addmul_1 w c albo zrezygnuj z LEAF_PROC.

Dzięki, ta LEAF_PROC jest niepotrzebna, wyrzuciłem, jeszcze coś jest.
Re: Linker C nie widzi procedury assemblerowej
#308913
Author: Borneq
Date: Sun, 16 Oct 2016 14:03
8 lines
1478 bytes
W dniu 16.10.2016 o 15:42, Borneq pisze:
> W dniu 16.10.2016 o 14:48, Marek Borowski pisze:
>> Jak widac dodaje prefix __g wiec nie dziwne ze linker nie znajduje
>> symbolu. Albo uzywaj __gmpn_addmul_1 w c albo zrezygnuj z LEAF_PROC.
>
> Dzięki, ta LEAF_PROC jest niepotrzebna, wyrzuciłem, jeszcze coś jest.
>
Jeszcze __g w innym miejscu było, już w porządku
Re: Linker C nie widzi procedury assemblerowej
#308915
Author: Borneq
Date: Sun, 16 Oct 2016 14:06
13 lines
1716 bytes
W dniu 16.10.2016 o 16:03, Borneq pisze:
> W dniu 16.10.2016 o 15:42, Borneq pisze:
>> W dniu 16.10.2016 o 14:48, Marek Borowski pisze:
>>> Jak widac dodaje prefix __g wiec nie dziwne ze linker nie znajduje
>>> symbolu. Albo uzywaj __gmpn_addmul_1 w c albo zrezygnuj z LEAF_PROC.
>>
>> Dzięki, ta LEAF_PROC jest niepotrzebna, wyrzuciłem, jeszcze coś jest.
>>
> Jeszcze __g w innym miejscu było, już w porządku
A jak to będzie w C++?
W C++ jest coś takiego jak namespace, ale czy to będzie widoczne w 
assemblerze? czy też trzeba będzie tam dodawać jakiś prefiks do nazwy 
aby była unikalna w całym projekcie?
Re: Linker C nie widzi procedury assemblerowej
#308914
Author: Marek Borowski
Date: Sun, 16 Oct 2016 20:25
22 lines
2051 bytes
On 16.10.2016 16:06, Borneq wrote:
> W dniu 16.10.2016 o 16:03, Borneq pisze:
>> W dniu 16.10.2016 o 15:42, Borneq pisze:
>>> W dniu 16.10.2016 o 14:48, Marek Borowski pisze:
>>>> Jak widac dodaje prefix __g wiec nie dziwne ze linker nie znajduje
>>>> symbolu. Albo uzywaj __gmpn_addmul_1 w c albo zrezygnuj z LEAF_PROC.
>>>
>>> Dzięki, ta LEAF_PROC jest niepotrzebna, wyrzuciłem, jeszcze coś jest.
>>>
>> Jeszcze __g w innym miejscu było, już w porządku
> A jak to będzie w C++?
> W C++ jest coś takiego jak namespace, ale czy to będzie widoczne w
> assemblerze? czy też trzeba będzie tam dodawać jakiś prefiks do nazwy
> aby była unikalna w całym projekcie?
Jak najbardziej. Zobacz name decoration.
Pytanie czy bezpośrednie lączenie C++ z asm jest konieczne. Mozna wszak 
zadeklarowac funkcje asemblerowe jako extern "C".


Pozdrawiam

Marek
Re: Linker C nie widzi procedury assemblerowej
#308916
Author: Borneq
Date: Mon, 17 Oct 2016 01:10
6 lines
1456 bytes
W dniu 16.10.2016 o 22:25, Marek Borowski pisze:
> Pytanie czy bezpośrednie lączenie C++ z asm jest konieczne. Mozna wszak
> zadeklarowac funkcje asemblerowe jako extern "C".

To znaczy w assemlerze zostaje jak jest  będzie dosłowna nazwa, a w 
headerze dla C funkcja będzie extern "C"?
Re: Linker C nie widzi procedury assemblerowej
#308917
Author: M.M.
Date: Mon, 17 Oct 2016 06:33
10 lines
2027 bytes
On Monday, October 17, 2016 at 3:10:30 AM UTC+2, Borneq wrote:
> W dniu 16.10.2016 o 22:25, Marek Borowski pisze:
> > Pytanie czy bezpośrednie lączenie C++ z asm jest konieczne. Mozna wszak
> > zadeklarowac funkcje asemblerowe jako extern "C".
> 
> To znaczy w assemlerze zostaje jak jest  będzie dosłowna nazwa, a w 
> headerze dla C funkcja będzie extern "C"?

No tak, bo kompilator C++ szuka nazwy zgodnej z tzw międleniem nazw.
Pozdrawiam
Re: Linker C nie widzi procedury assemblerowej
#308918
Author: Borneq
Date: Tue, 18 Oct 2016 16:46
11 lines
1890 bytes
W dniu 17.10.2016 o 08:33, M.M. pisze:
> No tak, bo kompilator C++ szuka nazwy zgodnej z tzw międleniem nazw.
> Pozdrawiam

A jak najlepiej zrobić coś takiego: projekt w C++ z przestrzeniami nazw 
ale mają być pliki assemblerowe, ma to kompilować się w Visualu jak GCC. 
Pliki assemblerowe będą różne w zależności od trybu 32bit czy 64bit, czy 
typu procesora a oprócz tego będzie wersja generic w C (niekoniecznie 
C++). Myślałem nad assemblerem wbudowanym w kompilator C++, ale Visual i 
GCC mają różny, a Yasm może kompilować nawet składnię GAS (rozszerzenie 
plików .s).
Re: Linker C nie widzi procedury assemblerowej
#308919
Author: Matt D.
Date: Tue, 18 Oct 2016 20:03
22 lines
2222 bytes
On 10/18/2016 18:46, Borneq wrote:
> W dniu 17.10.2016 o 08:33, M.M. pisze:
>> No tak, bo kompilator C++ szuka nazwy zgodnej z tzw międleniem nazw.
>> Pozdrawiam
>
> A jak najlepiej zrobić coś takiego: projekt w C++ z przestrzeniami nazw
> ale mają być pliki assemblerowe, ma to kompilować się w Visualu jak GCC.
> Pliki assemblerowe będą różne w zależności od trybu 32bit czy 64bit, czy
> typu procesora a oprócz tego będzie wersja generic w C (niekoniecznie
> C++). Myślałem nad assemblerem wbudowanym w kompilator C++, ale Visual i
> GCC mają różny, a Yasm może kompilować nawet składnię GAS (rozszerzenie
> plików .s).

Tak to robi projekt OpenSSL (na dobre i na zle):
https://github.com/openssl/openssl/tree/master/crypto/perlasm

Patrz "Chapter 19:  Processor-specific code" tutaj:
https://www.openssl.org/policies/codingstyle.txt

Pozdrawiam,

Matt
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads