RoBoLoG

[ROS2] OSError: [Errno 8] Exec format error 본문

Error Solution/ROS

[ROS2] OSError: [Errno 8] Exec format error

SKJun 2024. 9. 25. 18:34

 

[오류]

ROS2에서 launch 파일을 실행했는데, 다음과 같은 Exec format error가 발생하였습니다.

[INFO] [launch]: Default logging verbosity is set to INFO
[ERROR] [publisher_node.py-1]: exception occurred while executing process:
Traceback (most recent call last):
  File "/opt/ros/foxy/lib/python3.8/site-packages/launch/actions/execute_process.py", line 723, in __execute_process
    transport, self._subprocess_protocol = await async_execute_process(
  File "/opt/ros/foxy/lib/python3.8/site-packages/osrf_pycommon/process_utils/async_execute_process_asyncio/impl.py", line 142, in async_execute_process
    transport, protocol = yield from _async_execute_process_nopty(
  File "/opt/ros/foxy/lib/python3.8/site-packages/osrf_pycommon/process_utils/async_execute_process_asyncio/impl.py", line 46, in _async_execute_process_nopty
    transport, protocol = yield from loop.subprocess_exec(
  File "/usr/lib/python3.8/asyncio/base_events.py", line 1630, in subprocess_exec
    transport = await self._make_subprocess_transport(
  File "/usr/lib/python3.8/asyncio/unix_events.py", line 197, in _make_subprocess_transport
    transp = _UnixSubprocessTransport(self, protocol, args, shell,
  File "/usr/lib/python3.8/asyncio/base_subprocess.py", line 36, in __init__
    self._start(args=args, shell=shell, stdin=stdin, stdout=stdout,
  File "/usr/lib/python3.8/asyncio/unix_events.py", line 789, in _start
    self._proc = subprocess.Popen(
  File "/usr/lib/python3.8/subprocess.py", line 858, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.8/subprocess.py", line 1594, in _execute_child
    self._posix_spawn(args, executable, env, restore_signals,
  File "/usr/lib/python3.8/subprocess.py", line 1545, in _posix_spawn
    self.pid = os.posix_spawn(executable, args, env, **kwargs)
OSError: [Errno 8] Exec format error: '/home/wow/new_ws/install/publisher/lib/publisher/publisher_node.py'

 


[주요 원인 및 해결 방법]

이 오류는 **Exec format error**로, Python 스크립트나 실행 파일이 실행 불가능한 포맷으로 처리되고 있다는 것을 의미합니다. 보통 다음과 같은 원인으로 발생할 수 있습니다
 
 

1. Python 스크립트의 해더 누락 (#!/usr/bin/env python3)

  • Python 스크립트를 실행 가능한 파일로 만들기 위해서는 스크립트의 첫 번째 줄에 **쉐뱅(shebang)**이 필요합니다. 이 쉐뱅은 시스템에 Python 인터프리터가 어디에 위치해 있는지 알려줍니다.
  • 쉐뱅이 없으면 스크립트를 실행할 때 **Exec format error**가 발생할 수 있습니다.
  • 해결 방법: Python 스크립트의 첫 번째 줄에 다음과 같은 쉐뱅을 추가하세요.
#!/usr/bin/env python3

 

2. 실행 권한 문제

  • Python 스크립트가 실행 권한이 없을 경우에도 이 오류가 발생할 수 있습니다. publisher_node.py 파일이 실행 가능한 권한을 가지고 있는지 확인해야 합니다.
  • 해결 방법: 스크립트에 실행 권한을 부여하세요.
chmod +x /home/wow/new_ws/install/publisher/lib/publisher/publisher_node.py
 

3. 잘못된 인터프리터 경로

  • 만약 Python 스크립트에서 잘못된 인터프리터 경로를 사용하는 경우에도 이 오류가 발생할 수 있습니다. 예를 들어, Python 2와 Python 3이 섞여 있거나, 경로가 잘못 지정된 경우입니다.
  • 해결 방법: 스크립트의 첫 줄에 적절한 Python 인터프리터 경로가 있는지 확인합니다.
  • 올바른 Python 인터프리터 경로는 보통 다음과 같습니다: #!/usr/bin/env python3

4. 잘못된 바이너리 실행 파일

  • Exec format error는 Python 스크립트가 아닌 경우에도 발생할 수 있습니다. 예를 들어, 다른 플랫폼에서 빌드된 실행 파일을 실행하려고 할 때 이 오류가 발생할 수 있습니다. 특히 ARM용 바이너리를 x86 플랫폼에서 실행하려는 경우 등입니다.
  • 해결 방법: Python 스크립트나 실행 파일이 올바른 아키텍처에서 빌드되었는지 확인하세요. 이 경우 Python 스크립트가 아닌 컴파일된 바이너리 파일에서 발생하는 문제일 수 있습니다.

해결 방법 요약:

  1. 쉐뱅 추가: publisher_node.py 파일의 첫 번째 줄에 쉐뱅(#!/usr/bin/env python3)을 추가합니다.
  2. 실행 권한 추가: 파일에 실행 권한을 부여합니다 (chmod +x).
  3. Python 인터프리터 경로 확인: 쉐뱅이 Python 3 인터프리터를 가리키는지 확인합니다.
728x90
반응형