프로그램 사용/gcc2019.06.21 17:40

예전글에서 누락된 부분인데..

-l로 링커에 넘겨서 붙일 녀석들은 왜인지 모르겠지만 가장 마지막에 옵션을 주어야 한다.

 

아래처럼 파일명 이후에 -l을 넣어주면 문제없이 되는데

$ gcc -I/usr/include/libxml2 reader2.c  -lxml2 

 

-l 이후에 파일명을 넣으면 해당 파일을 찾을수 없다고 나온다.

(그냥 테스트 해보면 -lxml2를 넣지 않은것과 동일하다)

$ gcc -I/usr/include/libxml2 -lxml2 reader2.c
/tmp/ccUmEsNl.o: In function `processNode':
reader2.c:(.text+0x19): undefined reference to `xmlTextReaderConstName'
reader2.c:(.text+0x3b): undefined reference to `xmlTextReaderConstValue'
reader2.c:(.text+0x4b): undefined reference to `xmlTextReaderHasValue'
reader2.c:(.text+0x5a): undefined reference to `xmlTextReaderIsEmptyElement'
reader2.c:(.text+0x69): undefined reference to `xmlTextReaderNodeType'
reader2.c:(.text+0x77): undefined reference to `xmlTextReaderDepth'
reader2.c:(.text+0xb8): undefined reference to `xmlStrlen'
/tmp/ccUmEsNl.o: In function `streamFile':
reader2.c:(.text+0x11d): undefined reference to `xmlReaderForFile'
reader2.c:(.text+0x138): undefined reference to `xmlTextReaderRead'
reader2.c:(.text+0x155): undefined reference to `xmlTextReaderRead'
reader2.c:(.text+0x16a): undefined reference to `xmlTextReaderIsValid'
reader2.c:(.text+0x19a): undefined reference to `xmlFreeTextReader'
/tmp/ccUmEsNl.o: In function `main':
reader2.c:(.text+0x209): undefined reference to `xmlCheckVersion'
reader2.c:(.text+0x221): undefined reference to `xmlCleanupParser'
reader2.c:(.text+0x226): undefined reference to `xmlMemoryDump'
collect2: error: ld returned 1 exit status

 

머지?

foo.o -lz bar.o일 경우

foo.o는 libz가 로드 되지만, bar.o 에서는 libz가 로드되지 않는다?

-llibrary
-l library
Search the library named library when linking. (The second alternative with the library as a separate argument is only for POSIX compliance and is not recommended.)
It makes a difference where in the command you write this option; the linker searches and processes libraries and object files in the order they are specified. Thus, foo.o -lz bar.o searches library z after file foo.o but before bar.o. If bar.o refers to functions in z, those functions may not be loaded.

The linker searches a standard list of directories for the library, which is actually a file named liblibrary.a. The linker then uses this file as if it had been specified precisely by name.

The directories searched include several standard system directories plus any that you specify with -L.

Normally the files found this way are library files---archive files whose members are object files. The linker handles an archive file by scanning through it for members which define symbols that have so far been referenced but not defined. But if the file that is found is an ordinary object file, it is linked in the usual fashion. The only difference between using an -l option and specifying a file name is that -l surrounds library with lib and .a and searches several directories.

[링크 : https://linux.die.net/man/1/gcc]

'프로그램 사용 > gcc' 카테고리의 다른 글

gcc의 linker 옵션 은 가장 끝에  (0) 2019.06.21
c large file support  (0) 2019.06.21
gcc5 atoi / stoi  (0) 2019.06.14
gcc variadic macro  (0) 2017.06.20
문자열에 escape 로 특수문자 넣기  (0) 2017.06.19
gcc cpp type (유니코드 문자열)  (0) 2017.04.04
Posted by 구차니

댓글을 달아 주세요

프로그램 사용/gcc2019.06.21 17:02

아래의 선언을 해주면 된다는데.. 모르겠다?

 

-D_LARGE_FILE_SOURCE=1

[링크 : https://stackoverflow.com/questions/14533836/large-file-support-not-working-in-c-programming]

'프로그램 사용 > gcc' 카테고리의 다른 글

gcc의 linker 옵션 은 가장 끝에  (0) 2019.06.21
c large file support  (0) 2019.06.21
gcc5 atoi / stoi  (0) 2019.06.14
gcc variadic macro  (0) 2017.06.20
문자열에 escape 로 특수문자 넣기  (0) 2017.06.19
gcc cpp type (유니코드 문자열)  (0) 2017.04.04
Posted by 구차니

댓글을 달아 주세요

프로그램 사용/gcc2019.06.14 15:28

????

'프로그램 사용 > gcc' 카테고리의 다른 글

gcc의 linker 옵션 은 가장 끝에  (0) 2019.06.21
c large file support  (0) 2019.06.21
gcc5 atoi / stoi  (0) 2019.06.14
gcc variadic macro  (0) 2017.06.20
문자열에 escape 로 특수문자 넣기  (0) 2017.06.19
gcc cpp type (유니코드 문자열)  (0) 2017.04.04
Posted by 구차니

댓글을 달아 주세요

프로그램 사용/gcc2017.06.20 09:49

매크로에도 ...을 쓸 수 있다니 ㄷㄷ


#define eprintf() fprintf (stderr, __VA_ARGS__)

[링크 : https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html]

'프로그램 사용 > gcc' 카테고리의 다른 글

c large file support  (0) 2019.06.21
gcc5 atoi / stoi  (0) 2019.06.14
gcc variadic macro  (0) 2017.06.20
문자열에 escape 로 특수문자 넣기  (0) 2017.06.19
gcc cpp type (유니코드 문자열)  (0) 2017.04.04
gcc 매크로 확장 define stringfication  (0) 2017.01.02
Posted by 구차니

댓글을 달아 주세요

프로그램 사용/gcc2017.06.19 22:10

"\x6E" 이런식으로 문자를 넣으면 되는데 연속으로 넣으면 에러날수도(?)

만약에


0xc0 À 를 넣으면

"\xC0" 인데

À1 을 출력하고 싶다고

"\xC01"을 넣으면 이상한 걸로 인식을 하거나 에러나기도 한다.


어떻게 해결 해야 하려나...


\nnnnote 1anyThe byte whose numerical value is given by nnn interpreted as an octal number
\xhh…anyThe byte whose numerical value is given by hh… interpreted as a hexadecimal number
\enote 21Bescape character (some character sets)
\Uhhhhhhhhnote 3noneUnicode code point where h is a hexadecimal digit
\uhhhhnote 4noneUnicode code point below 10000 hexadecimal

[링크 : https://en.wikipedia.org/wiki/Escape_sequences_in_C]

'프로그램 사용 > gcc' 카테고리의 다른 글

gcc5 atoi / stoi  (0) 2019.06.14
gcc variadic macro  (0) 2017.06.20
문자열에 escape 로 특수문자 넣기  (0) 2017.06.19
gcc cpp type (유니코드 문자열)  (0) 2017.04.04
gcc 매크로 확장 define stringfication  (0) 2017.01.02
gcc make CFLAGS=-D 관련  (0) 2016.11.17
Posted by 구차니

댓글을 달아 주세요

프로그램 사용/gcc2017.04.04 21:00

GCC G++ 공식문서를 찾지 못했는데

아무튼.. wchar_t 로 wide character형이 추가된것 외에는 차이가 없는듯

kldp 쪽을 봐도 gcc에서는 UTF-32 4byte 로 된다는 정도만 있는것 봐서는

MSVC에 비해 유니코드 대응이 미진하긴 미진 한 듯.


wchar_t

type for wide character representation (see wide strings). Required to be large enough to represent any supported character code point (32 bits on systems that support Unicode. A notable exception is Windows, where wchar_t is 16 bits and holds UTF-16 code units) It has the same size, signedness, and alignment as one of the integral types, but is a distinct type.


[링크 : http://en.cppreference.com/w/cpp/language/types]

[링크 : http://en.cppreference.com/w/cpp/keyword]

'프로그램 사용 > gcc' 카테고리의 다른 글

gcc variadic macro  (0) 2017.06.20
문자열에 escape 로 특수문자 넣기  (0) 2017.06.19
gcc cpp type (유니코드 문자열)  (0) 2017.04.04
gcc 매크로 확장 define stringfication  (0) 2017.01.02
gcc make CFLAGS=-D 관련  (0) 2016.11.17
gcc -fPIC  (0) 2016.06.22
Posted by 구차니

댓글을 달아 주세요

프로그램 사용/gcc2017.01.02 15:14

#define STRING(x) #x


간단하네


[링크 : https://gcc.gnu.org/onlinedocs/cpp/Stringification.html]

[링크 : http://stackoverflow.com/questions/10507264/how-to-use-macro-argument-as-string-literal]

'프로그램 사용 > gcc' 카테고리의 다른 글

문자열에 escape 로 특수문자 넣기  (0) 2017.06.19
gcc cpp type (유니코드 문자열)  (0) 2017.04.04
gcc 매크로 확장 define stringfication  (0) 2017.01.02
gcc make CFLAGS=-D 관련  (0) 2016.11.17
gcc -fPIC  (0) 2016.06.22
gcc dependency .d 파일?  (0) 2016.03.28
Posted by 구차니

댓글을 달아 주세요

프로그램 사용/gcc2016.11.17 17:43

-D 는 아는데..

-DFLAG=1 이런식으로 쓰는걸 몰라서 검색 ㅠㅠ


-D name

Predefine name as a macro, with definition 1. 

-D name=definition

The contents of definition are tokenized and processed as if they appeared during translation phase three in a ‘#define’ directive. In particular, the definition will be truncated by embedded newline characters.

If you are invoking the preprocessor from a shell or shell-like program you may need to use the shell's quoting syntax to protect characters such as spaces that have a meaning in the shell syntax.


If you wish to define a function-like macro on the command line, write its argument list with surrounding parentheses before the equals sign (if any). Parentheses are meaningful to most shells, so you will need to quote the option. With sh and csh, -D'name(args...)=definition' works.


-D and -U options are processed in the order they are given on the command line. All -imacros file and -include file options are processed after all -D and -U options.  

[링크 : https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html]

[링크 : https://wiki.openssl.org/index.php/Manual:OPENSSL_VERSION_NUMBER(3)]

'프로그램 사용 > gcc' 카테고리의 다른 글

gcc cpp type (유니코드 문자열)  (0) 2017.04.04
gcc 매크로 확장 define stringfication  (0) 2017.01.02
gcc make CFLAGS=-D 관련  (0) 2016.11.17
gcc -fPIC  (0) 2016.06.22
gcc dependency .d 파일?  (0) 2016.03.28
gcc -p -pg  (0) 2016.02.25
Posted by 구차니

댓글을 달아 주세요

프로그램 사용/gcc2016.06.22 12:25

-f 니까 플래그고

PIC(Position Independent Code)

[링크 : http://devanix.tistory.com/198]


-shared 하면 자동으로 -fpic나 -fPIC가 설정되는건 아닌듯?

아무튼. .x86에는 연관이 없지만, 다른 아키텍쳐에서는 GOT 크기 문제로 -fpic와 -fPIC가 다르게 적용된다고 한다.

-shared

Produce a shared object which can then be linked with other objects to form an executable. Not all systems support this option. For predictable results, you must also specify the same set of options that were used to generate code (-fpic, -fPIC, or model suboptions) when you specify this option.[1]


-fpic

Generate position-independent code ( PIC ) suitable for use in a shared library, if supported for the target machine. Such code accesses all constant addresses through a global offset table ( GOT ). The dynamic loader resolves the GOT entries when the program starts (the dynamic loader is not part of GCC ; it is part of the operating system). If the GOT size for the linked executable exceeds a machine-specific maximum size, you get an error message from the linker indicating that -fpic does not work; in that case, recompile with -fPIC instead. (These maximums are 8k on the SPARC and 32k on the m68k and RS/6000 . The 386 has no such limit.)

Position-independent code requires special support, and therefore works only on certain machines. For the 386, GCC supports PIC for System V but not for the Sun 386i. Code generated for the IBM RS/6000 is always position-independent.


When this flag is set, the macros "__pic__" and "__PIC__" are defined to 1.


-fPIC

If supported for the target machine, emit position-independent code, suitable for dynamic linking and avoiding any limit on the size of the global offset table. This option makes a difference on the m68k, PowerPC and SPARC .

Position-independent code requires special support, and therefore works only on certain machines.


When this flag is set, the macros "__pic__" and "__PIC__" are defined to 2.


-fpie

-fPIE

These options are similar to -fpic and -fPIC, but generated position independent code can be only linked into executables. Usually these options are used when -pie GCC option will be used during linking.

-fpie and -fPIE both define the macros "__pie__" and "__PIE__". The macros have the value 1 for -fpie and 2 for -fPIE. 

[링크 : http://linux.die.net/man/1/gcc]




Pseudo-assembly:


PIC: This would work whether the code was at address 100 or 1000

100: COMPARE REG1, REG2

101: JUMP_IF_EQUAL CURRENT+10

...

111: NOP


Non-PIC: This will only work if the code is at address 100

100: COMPARE REG1, REG2

101: JUMP_IF_EQUAL 111

...

111: NOP


If your code is compiled with -fPIC, it's suitable for inclusion in a library - the library must be able to be relocated from its preferred location in memory to another address, there could be another already loaded library at the address your library prefers. 

[링크 : http://stackoverflow.com/questions/5311515/gcc-fpic-option?rq=1]

'프로그램 사용 > gcc' 카테고리의 다른 글

gcc 매크로 확장 define stringfication  (0) 2017.01.02
gcc make CFLAGS=-D 관련  (0) 2016.11.17
gcc -fPIC  (0) 2016.06.22
gcc dependency .d 파일?  (0) 2016.03.28
gcc -p -pg  (0) 2016.02.25
gcc -M -MM  (0) 2015.12.17
Posted by 구차니

댓글을 달아 주세요

프로그램 사용/gcc2016.03.28 20:21

쓰는 법은 좀 나중에 읽어 봐야지...

make + gcc에서

컴파일시 의존성을 자동으로 끌어가기 위해

(make 쪽에서 파일 의존성 체크 하니까)

gcc를 이용하여 해당 소스에서 요구하는 헤더들의 목록을 .d 파일로 빼내는 기능


-MM 등의 옵션이 있나 보다..


[링크 : https://latedev.wordpress.com/2014/11/08/generic-makefiles-with-gcc-and-gnu-make/]

[링크 : http://scottmcpeak.com/autodepend/autodepend.html]

[링크 : https://gcc.gnu.org/onlinedocs/gcc-4.4.1/gcc/Preprocessor-Options.html]

'프로그램 사용 > gcc' 카테고리의 다른 글

gcc make CFLAGS=-D 관련  (0) 2016.11.17
gcc -fPIC  (0) 2016.06.22
gcc dependency .d 파일?  (0) 2016.03.28
gcc -p -pg  (0) 2016.02.25
gcc -M -MM  (0) 2015.12.17
gcc 초기화 관련  (0) 2015.10.21
Posted by 구차니

댓글을 달아 주세요