Я вообщем давно ничего на си не писал.
Я пытаюсь скомпилировать пример из BASS (writewav.c) (www.un4seen.com)
с помощью bcc32 (халявный от борланда для коммандной строки)
Вообщем выдает, что нет нужной функции:
Warning W8065 writewav.c 23: Call to function 'BASS_GetVersion' with no prototype in function main
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external 'BASS_GetVersion' referenced from C:\BCC55\BIN\WRITEWAV.OBJ
А вот код:
/* Imports: bass.lib, basswma.lib, kernel32.lib*/
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "bass.h"
[b][SIZE=1]
void main()
{
/* check that BASS 1.8 was loaded */
if (BASS_GetVersion()!=MAKELONG(1,8)) {
printf("BASS version 1.8 was not loaded\n");
return;
}
}
Можь я не правильно загружаю bass.h?
16.10.03 15:46: Перенесено модератором из 'C/C++' — ПК
Здравствуйте, anod, Вы писали:
A>Я вообщем давно ничего на си не писал. A>Я пытаюсь скомпилировать пример из BASS (writewav.c) (www.un4seen.com) A>с помощью bcc32 (халявный от борланда для коммандной строки)
A>Вообщем выдает, что нет нужной функции:
A> A>Warning W8065 writewav.c 23: Call to function 'BASS_GetVersion' with no prototype in function main A>Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland A>Error: Unresolved external 'BASS_GetVersion' referenced from C:\BCC55\BIN\WRITEWAV.OBJ A>
A>А вот код:
A> A>/* Imports: bass.lib, basswma.lib, kernel32.lib*/
A>#include <windows.h> A>#include <stdio.h> A>#include <conio.h> A>#include "bass.h" A>[b][SIZE=1] A>void main() A>{ A>/* check that BASS 1.8 was loaded */ A>if (BASS_GetVersion()!=MAKELONG(1,8)) { A>printf("BASS version 1.8 was not loaded\n"); A>return; A>} A>} A>
A>Можь я не правильно загружаю bass.h?
Скорее всего bass.h — содержит только объявления, а по сему линкер не может найти собственно реализации функций.
Необходимо в проект добавить соответствующую библиотек (lib-файл).
Why do you call Visual Studio 'your bunny'?...
(c) one american colleague
Здравствуйте, creatio, Вы писали:
C>Скорее всего bass.h — содержит только объявления, а по сему линкер не может найти собственно реализации функций. C>Необходимо в проект добавить соответствующую библиотек (lib-файл).
У меня bass.lib и bass.dll лежали в той же папке, что и программа, поместил их в папку lib — не помогло.
запускаю так:
bcc32 -Ic:\bcc55\include -Lc:\bcc55\lib writewav.c
A>/* Imports: bass.lib, basswma.lib, kernel32.lib*/
A>#include <windows.h>
A>#include <stdio.h>
A>#include <conio.h>
A>#include"bass.h"
A>void main()
A>{
A> /* check that BASS 1.8 was loaded */
A> if (BASS_GetVersion()!=MAKELONG(1,8)) {
A> printf("BASS version 1.8 was not loaded\n");
A> return;
A> }
A>}
A>
Может быть, все дело в выделенной строчке?
Подключи перечисленные либы.
Здравствуйте, anod, Вы писали:
A>Здравствуйте, creatio, Вы писали:
C>>Скорее всего bass.h — содержит только объявления, а по сему линкер не может найти собственно реализации функций. C>>Необходимо в проект добавить соответствующую библиотек (lib-файл).
A>У меня bass.lib и bass.dll лежали в той же папке, что и программа, поместил их в папку lib — не помогло. A>запускаю так: A>bcc32 -Ic:\bcc55\include -Lc:\bcc55\lib writewav.c
не знаю, как там у борланда, но обычно ключ L — это путь, где надо искать библиотеки, перечисленные под ключом -l.
так что попробуй написать
bcc32 -Ic:\bcc55\include -Lc:\bcc55\lib -lbass -lkernel32 -lbasswma -lwritewav.c (как-то так)
Здравствуйте, jazzer, Вы писали:
J>не знаю, как там у борланда, но обычно ключ L — это путь, где надо искать библиотеки, перечисленные под ключом -l.
J>так что попробуй написать J>bcc32 -Ic:\bcc55\include -Lc:\bcc55\lib -lbass -lkernel32 -lbasswma -lwritewav.c (как-то так)
bcc32 -Ic:\bcc55\include -Lc:\bcc55\lib -lbass -lkernel32 -lbasswma writewav.c
пишет:
writewav.c: Warning W8065 writewav.c 23: Call to function 'BASS_GetVersion' with no prototype in function main
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Fatal: Expected a ':' or '=': b
Syntax is: BCC32 [ options ] file[s]
-Ixxx Include files directory -Lxxx Libraries directory
Здравствуйте, anod, Вы писали:
A>Здравствуйте, jazzer, Вы писали:
J>>не знаю, как там у борланда, но обычно ключ L — это путь, где надо искать библиотеки, перечисленные под ключом -l.
J>>так что попробуй написать J>>bcc32 -Ic:\bcc55\include -Lc:\bcc55\lib -lbass -lkernel32 -lbasswma -lwritewav.c (как-то так)
A>bcc32 -Ic:\bcc55\include -Lc:\bcc55\lib -lbass -lkernel32 -lbasswma writewav.c A>пишет: A>writewav.c: A>Warning W8065 writewav.c 23: Call to function 'BASS_GetVersion' with no prototype in function main A>Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland A>Fatal: Expected a ':' or '=': b
A> A>Syntax is: BCC32 [ options ] file[s] A> -Ixxx Include files directory -Lxxx Libraries directory
Ну посмотри документацию по компилятору, в каком виде ему надо поставлять имена библиотек в опции -l.
Я же не могу это за тебя сделать, сидя на работе в юнихе :)
Здравствуйте, jazzer, Вы писали:
J>Ну посмотри документацию по компилятору, в каком виде ему надо поставлять имена библиотек в опции -l. J>Я же не могу это за тебя сделать, сидя на работе в юнихе
Я тут readme почитал, и сделал все как там написанно — одно и тоже
a. Add "c:\Bcc55"
to the existing path
b. Create a bcc32.cfg file which will set
the compiler options for the Include
and Lib paths (-I and -L switches to
compiler) by adding these lines:
-I"c:\Bcc55\include"
-L"c:\Bcc55\lib"
c. Create an ilink32.cfg file which will set
the linker option for the Lib path by
adding this line:
-L"c:\Bcc55\lib"
Здравствуйте, anod, Вы писали:
A>Здравствуйте, jazzer, Вы писали:
J>>Ну посмотри документацию по компилятору, в каком виде ему надо поставлять имена библиотек в опции -l. J>>Я же не могу это за тебя сделать, сидя на работе в юнихе :)
A>Я тут readme почитал, и сделал все как там написанно — одно и тоже
ты не readme читай, а документацию, где все написано и разжевано, как какой ключ компилятора работает и какой у него синтаксис? и как подключать библиотеки для линковки.
Сходи на сайт борланда, по инету полазай...
вот я написал в яндексе "bcc32 flags" и пошел по первой же ссылке и нашел нечто похожее на то, что надо:
bcc32 -Ic:\rogue test.cpp c:\rogue\lib\btl.lib user32.lib
Вообщем я розабрался с этой проблемой, надо было добавить эту строчку #define BASSDEF(f) (WINAPI *f) // define the functions as pointers
Появилась новая проблема, если компилирую с помощью bcc32.exe, то
выдает следующее: Warning W8060 writewav.cpp 54: Possibly incorrect assignment in function main(int,char * *)
Main выглядит так: void main(int argc, char **argv)
А аргумент в функции, которая вызывает это сообщение, argv[1], описан как void *
как их привести????
Если компилирую с помощью lcc, то выдает следующее left operand of . has incompatible type 'int'
код: WAVEFORMATEX wf;
wf.nBlockAlign=wf.nChannels*wf.wBitsPerSample/8;
по MSDN эти параметры типа word: typedef struct
{
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
} WAVEFORMATEX; *PWAVEFORMATEX;
И ещё, нет ли у кого-нибуть хороших ссылок на приведение типов в с????